<?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>168374</bug_id>
          
          <creation_ts>2017-02-15 09:50:06 -0800</creation_ts>
          <short_desc>[JSC] Drop PassRefPtr in bytecompiler/</short_desc>
          <delta_ts>2017-02-15 23:58:33 -0800</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>WebKit 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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1277230</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-15 09:50:06 -0800</bug_when>
    <thetext>[JSC] Drop PassRefPtr in bytecompiler/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277240</commentid>
    <comment_count>1</comment_count>
      <attachid>301628</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-15 10:02:33 -0800</bug_when>
    <thetext>Created attachment 301628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277551</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-02-15 23:58:33 -0800</bug_when>
    <thetext>Committed r212425: &lt;http://trac.webkit.org/changeset/212425&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301628</attachid>
            <date>2017-02-15 10:02:33 -0800</date>
            <delta_ts>2017-02-15 10:57:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168374-20170216025957.patch</filename>
            <type>text/plain</type>
            <size>96046</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEyMzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OGM2MGVmNTZkNDRlYjYwYzA0M2JhNzUxODhkODVjODIwNTc1MWNkLi42MjRjMjM2MTkyZDExZTlm
NzhjZjQ2MTAzMTYxNGQ3MjBjN2E2MjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxMTEgQEAKIDIwMTctMDItMTUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKKyAgICAgICAgW0pTQ10gRHJvcCBQYXNzUmVmUHRyIGluIGJ5dGVjb21waWxlci8K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODM3NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggZHJvcHMgUGFzc1JlZlB0ciBpbiBieXRlY29tcGlsZXIgZGlyZWN0b3J5LgorICAgICAgICBX
ZSBjYXJlZnVsbHkgY2hhbmdlIHRoaXMgdG8gUmVmPD4uIEFuZCB3ZSB1c2UgUmVmPExhYmVsPgor
ICAgICAgICBhcyBtdWNoIGFzIHBvc3NpYmxlIGluc3RlYWQgb2YgdXNpbmcgUmVmUHRyPExhYmVs
Pi4KKyAgICAgICAgQW5kIHVzZSBMYWJlbCYgaW5zdGVhZCBvZiBMYWJlbCogYXMgbXVjaCBhcyBw
b3NzaWJsZS4KKworICAgICAgICBDdXJyZW50bHkgd2UgZG8gbm90IGFwcGx5IHRoaXMgY2hhbmdl
IGZvciBSZWZQdHI8UmVnaXN0ZXJJRD4sCisgICAgICAgIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0
aGlzIHBhdGNoLgorCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVEZWZhdWx0UGFyYW1l
dGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhY2spOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6bmV3TGFiZWxTY29wZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpuZXdMYWJlbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpuZXdF
bWl0dGVkTGFiZWwpOgorICAgICAgICBJbnRyb2R1Y2UgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLCB3
aGljaCByZXR1cm5zIG5ldyBsYWJlbCB0aGF0IGlzIGVtaXR0ZWQgcmlnaHQgaGVyZS4KKworICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhYmVsKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRKdW1wSWZUcnVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRKdW1wSWZGYWxzZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SnVtcElmTm90RnVuY3Rpb25DYWxsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KToKKyAgICAgICAgRHJvcCByZXR1cm5pbmcgUmVm
PExhYmVsPiBzaW5jZSBub2JvZHkgdXNlcyBpdC4KKworICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UmV0dXJuKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZpbmFsbHlDb250cm9sRmxv
d1Njb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmJyZWFrVGFyZ2V0KToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hUcnkpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wVHJ5KToKKyAgICAgICAgKEpTQzo6cHJlcGFyZUp1bXBU
YWJsZUZvclN3aXRjaCk6CisgICAgICAgIChKU0M6OnByZXBhcmVKdW1wVGFibGVGb3JTdHJpbmdT
d2l0Y2gpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXRlcmF0b3JOZXh0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJdGVyYXRvck5leHRXaXRoVmFsdWUpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEl0ZXJhdG9yQ2xvc2UpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmludmFsaWRhdGVGb3JJbkNvbnRleHRGb3JMb2Nh
bCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVxdWlyZU9iamVjdENv
ZXJjaWJsZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0WWllbGRQb2lu
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0WWllbGQpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdERlbGVnYXRlWWllbGQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBWaWFGaW5hbGx5SWZOZWVkZWQpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVyblZpYUZpbmFsbHlJZk5lZWRl
ZCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RmluYWxseUNvbXBsZXRp
b24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZik6CisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIEZpbmFsbHlK
dW1wLCBGaW5hbGx5Q29udGV4dCwgVHJ5RGF0YSwgVHJ5Q29udGV4dCBhbmQgVHJ5UmFuZ2UgaG9s
ZCBSZWY8TGFiZWw+CisgICAgICAgIGluc3RlYWQgb2YgUmVmUHRyPExhYmVsPi4gVGhleSBhcmUg
bmV2ZXIgbnVsbHB0ci4KKworICAgICAgICAoSlNDOjpGaW5hbGx5SnVtcDo6RmluYWxseUp1bXAp
OgorICAgICAgICAoSlNDOjpGaW5hbGx5Q29udGV4dDo6RmluYWxseUNvbnRleHQpOgorICAgICAg
ICAoSlNDOjpGaW5hbGx5Q29udGV4dDo6cmVnaXN0ZXJKdW1wKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlRm9yTGVmdEhhbmRTaWRlKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvTGFiZWwuaDoKKyAgICAgICAgTWFrZSBMYWJlbCBub25jb3B5YWJsZS4K
KworICAgICAgICAqIGJ5dGVjb21waWxlci9MYWJlbFNjb3BlLmg6CisgICAgICAgIChKU0M6Okxh
YmVsU2NvcGU6OkxhYmVsU2NvcGUpOgorICAgICAgICAoSlNDOjpMYWJlbFNjb3BlOjpicmVha1Rh
cmdldCk6CisgICAgICAgIGJyZWFrVGFyZ2V0IGFsd2F5cyByZXR1cm5zIExhYmVsJi4gT24gdGhl
IG90aGVyIGhhbmQsIGNvbnRpbnVlVGFyZ2V0IG1heSBiZSBudWxscHRyLgorICAgICAgICBTbyBp
dCByZXR1cm5zIExhYmVsKi4KKworICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwOgorICAgICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRp
b25Db250ZXh0KToKKyAgICAgICAgKEpTQzo6Q29uc3RhbnROb2RlOjplbWl0Qnl0ZWNvZGVJbkNv
bmRpdGlvbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVt
aXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OkxvZ2ljYWxOb3ROb2RlOjplbWl0Qnl0ZWNvZGVJbkNv
bmRpdGlvbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpCaW5hcnlPcE5vZGU6OmVtaXRCeXRlY29k
ZUluQ29uZGl0aW9uQ29udGV4dCk6CisgICAgICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpDb25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OklmRWxzZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRvV2hp
bGVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpXaGlsZU5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkZvck5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChK
U0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29udGludWVOb2Rl
Ojp0cml2aWFsVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6Q29udGludWVOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpCcmVha05vZGU6OnRyaXZpYWxUYXJnZXQpOgorICAgICAgICAo
SlNDOjpDYXNlQmxvY2tOb2RlOjplbWl0Qnl0ZWNvZGVGb3JCbG9jayk6CisgICAgICAgIChKU0M6
OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q2xhc3NFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKEpTQzo6YXNzaWduRGVmYXVsdFZhbHVlSWZVbmRlZmluZWQpOgorICAgICAgICAo
SlNDOjpBcnJheVBhdHRlcm5Ob2RlOjpiaW5kVmFsdWUpOgorICAgICAgICBVc2UgUmVmPExhYmVs
PiBhbmQgTGFiZWwmLgorCisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKKzIwMTctMDItMTUg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKICAgICAgICAgW0pTQ10g
RHJvcCBQYXNzUmVmUHRyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjgzMjAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCAzYTdjNzJiYjNlYjEwMjhiY2Fj
YjFlZGY3ZDI4NmMzOGQ0YTc1Yjg1Li5kODU3NWZlNjFhZjVlODM4NmI0NGM5NDhlZGUwNjFmZGRk
MDRhMjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtNjA5LDggKzYwOSw4IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25O
b2RlLCBVbmxpbmtlCiAgICAgICAgICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpKSB7CiAgICAgICAg
ICAgICAgICAgZW1pdE1vdmUobV9uZXdUYXJnZXRSZWdpc3RlciwgJm1fdGhpc1JlZ2lzdGVyKTsK
ICAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5k
OjpFeHRlbmRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gaXNEZXJpdmVk
ID0gbmV3TGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBkb25lID0g
bmV3TGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmPExhYmVsPiBpc0Rlcml2ZWQgPSBu
ZXdMYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBSZWY8TGFiZWw+IGRvbmUgPSBuZXdMYWJl
bCgpOwogICAgICAgICAgICAgICAgICAgICBtX2lzRGVyaXZlZENvbnN0dWN0b3IgPSBhZGRWYXIo
KTsKICAgICAgICAgICAgICAgICAgICAgZW1pdEdldEJ5SWQobV9pc0Rlcml2ZWRDb25zdHVjdG9y
LCAmbV9jYWxsZWVSZWdpc3RlciwgcHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmlzRGVy
aXZlZENvbnN0cnVjdG9yUHJpdmF0ZU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVtaXRK
dW1wSWZUcnVlKG1faXNEZXJpdmVkQ29uc3R1Y3RvciwgaXNEZXJpdmVkLmdldCgpKTsKQEAgLTY3
NywxOCArNjc3LDE4IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYg
dm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBVbmxpbmtlCiAgICAgLy8gYmVjYXVzZSBh
IGZ1bmN0aW9uJ3MgZGVmYXVsdCBwYXJhbWV0ZXIgRXhwcmVzc2lvbk5vZGVzIHdpbGwgdXNlIHRl
bXBvcmFyeSByZWdpc3RlcnMuCiAgICAgcHVzaFREWlZhcmlhYmxlcygqcGFyZW50U2NvcGVURFpW
YXJpYWJsZXMsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpEb05vdE9wdGltaXplLCBURFpSZXF1aXJl
bWVudDo6VW5kZXJURFopOwogCi0gICAgUmVmUHRyPExhYmVsPiBjYXRjaExhYmVsID0gbmV3TGFi
ZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNhdGNoTGFiZWwgPSBuZXdMYWJlbCgpOwogICAgIFRyeURh
dGEqIHRyeUZvcm1hbFBhcmFtZXRlcnNEYXRhID0gbnVsbHB0cjsKICAgICBib29sIG5lZWRUcnlD
YXRjaCA9IGlzQXN5bmNGdW5jdGlvbldyYXBwZXJQYXJzZU1vZGUocGFyc2VNb2RlKSAmJiAhaXNT
aW1wbGVQYXJhbWV0ZXJMaXN0OwogICAgIGlmIChuZWVkVHJ5Q2F0Y2gpIHsKLSAgICAgICAgUmVm
UHRyPExhYmVsPiB0cnlGb3JtYWxQYXJhbWV0ZXJzU3RhcnQgPSBlbWl0TGFiZWwobmV3TGFiZWwo
KS5nZXQoKSk7CisgICAgICAgIFJlZjxMYWJlbD4gdHJ5Rm9ybWFsUGFyYW1ldGVyc1N0YXJ0ID0g
bmV3RW1pdHRlZExhYmVsKCk7CiAgICAgICAgIHRyeUZvcm1hbFBhcmFtZXRlcnNEYXRhID0gcHVz
aFRyeSh0cnlGb3JtYWxQYXJhbWV0ZXJzU3RhcnQuZ2V0KCksIGNhdGNoTGFiZWwuZ2V0KCksIEhh
bmRsZXJUeXBlOjpTeW50aGVzaXplZENhdGNoKTsKICAgICB9CiAKICAgICBpbml0aWFsaXplRGVm
YXVsdFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKHBhcmFtZXRlcnMs
IGlzU2ltcGxlUGFyYW1ldGVyTGlzdCwgZnVuY3Rpb25Ob2RlLCBmdW5jdGlvblN5bWJvbFRhYmxl
LCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIGNhcHR1cmVzLCBzaG91bGRDcmVhdGVBcmd1bWVu
dHNWYXJpYWJsZUluUGFyYW1ldGVyU2NvcGUpOwogCiAgICAgaWYgKG5lZWRUcnlDYXRjaCkgewot
ICAgICAgICBSZWZQdHI8TGFiZWw+IGRpZE5vdFRocm93ID0gbmV3TGFiZWwoKTsKKyAgICAgICAg
UmVmPExhYmVsPiBkaWROb3RUaHJvdyA9IG5ld0xhYmVsKCk7CiAgICAgICAgIGVtaXRKdW1wKGRp
ZE5vdFRocm93LmdldCgpKTsKICAgICAgICAgZW1pdExhYmVsKGNhdGNoTGFiZWwuZ2V0KCkpOwog
ICAgICAgICBwb3BUcnkodHJ5Rm9ybWFsUGFyYW1ldGVyc0RhdGEsIGNhdGNoTGFiZWwuZ2V0KCkp
OwpAQCAtOTg3LDcgKzk4Nyw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVE
ZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlvblNjb3BlU3RhCiAgICAgICAgICAg
ICBlbWl0TW92ZSh0ZW1wLmdldCgpLCBwYXJhbWV0ZXJWYWx1ZS5nZXQoKSk7CiAgICAgICAgICAg
ICBpZiAocGFyYW1ldGVyLnNlY29uZCkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBjb25kaXRpb24gPSBlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHBhcmFtZXRl
clZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IHNraXBEZWZhdWx0
UGFyYW1ldGVyQmVjYXVzZU5vdFVuZGVmaW5lZCA9IG5ld0xhYmVsKCk7CisgICAgICAgICAgICAg
ICAgUmVmPExhYmVsPiBza2lwRGVmYXVsdFBhcmFtZXRlckJlY2F1c2VOb3RVbmRlZmluZWQgPSBu
ZXdMYWJlbCgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1wSWZGYWxzZShjb25kaXRpb24uZ2V0
KCksIHNraXBEZWZhdWx0UGFyYW1ldGVyQmVjYXVzZU5vdFVuZGVmaW5lZC5nZXQoKSk7CiAgICAg
ICAgICAgICAgICAgZW1pdE5vZGUodGVtcC5nZXQoKSwgcGFyYW1ldGVyLnNlY29uZCk7CiAgICAg
ICAgICAgICAgICAgZW1pdExhYmVsKHNraXBEZWZhdWx0UGFyYW1ldGVyQmVjYXVzZU5vdFVuZGVm
aW5lZC5nZXQoKSk7CkBAIC0xMTg1LDEyICsxMTg1LDEyIEBAIExhYmVsU2NvcGVQdHIgQnl0ZWNv
ZGVHZW5lcmF0b3I6Om5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6VHlwZSB0eXBlLCBjb25zdCBJ
ZGVuCiAgICAgICAgIG1fbGFiZWxTY29wZXMucmVtb3ZlTGFzdCgpOwogCiAgICAgLy8gQWxsb2Nh
dGUgbmV3IGxhYmVsIHNjb3BlLgotICAgIExhYmVsU2NvcGUgc2NvcGUodHlwZSwgbmFtZSwgbGFi
ZWxTY29wZURlcHRoKCksIG5ld0xhYmVsKCksIHR5cGUgPT0gTGFiZWxTY29wZTo6TG9vcCA/IG5l
d0xhYmVsKCkgOiBQYXNzUmVmUHRyPExhYmVsPigpKTsgLy8gT25seSBsb29wcyBoYXZlIGNvbnRp
bnVlIHRhcmdldHMuCi0gICAgbV9sYWJlbFNjb3Blcy5hcHBlbmQoc2NvcGUpOworICAgIExhYmVs
U2NvcGUgc2NvcGUodHlwZSwgbmFtZSwgbGFiZWxTY29wZURlcHRoKCksIG5ld0xhYmVsKCksIHR5
cGUgPT0gTGFiZWxTY29wZTo6TG9vcCA/IFJlZlB0cjxMYWJlbD4obmV3TGFiZWwoKSkgOiBSZWZQ
dHI8TGFiZWw+KCkpOyAvLyBPbmx5IGxvb3BzIGhhdmUgY29udGludWUgdGFyZ2V0cy4KKyAgICBt
X2xhYmVsU2NvcGVzLmFwcGVuZChXVEZNb3ZlKHNjb3BlKSk7CiAgICAgcmV0dXJuIExhYmVsU2Nv
cGVQdHIobV9sYWJlbFNjb3BlcywgbV9sYWJlbFNjb3Blcy5zaXplKCkgLSAxKTsKIH0KIAotUGFz
c1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6Om5ld0xhYmVsKCkKK1JlZjxMYWJlbD4g
Qnl0ZWNvZGVHZW5lcmF0b3I6Om5ld0xhYmVsKCkKIHsKICAgICAvLyBSZWNsYWltIGZyZWUgbGFi
ZWwgSURzLgogICAgIHdoaWxlIChtX2xhYmVscy5zaXplKCkgJiYgIW1fbGFiZWxzLmxhc3QoKS5y
ZWZDb3VudCgpKQpAQCAtMTE5OCwyMCArMTE5OCwyNyBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRl
Y29kZUdlbmVyYXRvcjo6bmV3TGFiZWwoKQogCiAgICAgLy8gQWxsb2NhdGUgbmV3IGxhYmVsIElE
LgogICAgIG1fbGFiZWxzLmFwcGVuZCgqdGhpcyk7Ci0gICAgcmV0dXJuICZtX2xhYmVscy5sYXN0
KCk7CisgICAgcmV0dXJuIG1fbGFiZWxzLmxhc3QoKTsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4g
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMYWJlbChMYWJlbCogbDApCitSZWY8TGFiZWw+IEJ5dGVj
b2RlR2VuZXJhdG9yOjpuZXdFbWl0dGVkTGFiZWwoKQoreworICAgIFJlZjxMYWJlbD4gbGFiZWwg
PSBuZXdMYWJlbCgpOworICAgIGVtaXRMYWJlbChsYWJlbC5nZXQoKSk7CisgICAgcmV0dXJuIGxh
YmVsOworfQorCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TGFiZWwoTGFiZWwmIGwwKQog
ewogICAgIHVuc2lnbmVkIG5ld0xhYmVsSW5kZXggPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0g
ICAgbDAtPnNldExvY2F0aW9uKG5ld0xhYmVsSW5kZXgpOworICAgIGwwLnNldExvY2F0aW9uKG5l
d0xhYmVsSW5kZXgpOwogCiAgICAgaWYgKG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRz
KCkpIHsKICAgICAgICAgdW5zaWduZWQgbGFzdExhYmVsSW5kZXggPSBtX2NvZGVCbG9jay0+bGFz
dEp1bXBUYXJnZXQoKTsKICAgICAgICAgQVNTRVJUKGxhc3RMYWJlbEluZGV4IDw9IG5ld0xhYmVs
SW5kZXgpOwogICAgICAgICBpZiAobmV3TGFiZWxJbmRleCA9PSBsYXN0TGFiZWxJbmRleCkgewog
ICAgICAgICAgICAgLy8gUGVlcGhvbGUgb3B0aW1pemF0aW9ucyBoYXZlIGFscmVhZHkgYmVlbiBk
aXNhYmxlZCBieSBlbWl0dGluZyB0aGUgbGFzdCBsYWJlbAotICAgICAgICAgICAgcmV0dXJuIGww
OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjE5LDcgKzEy
MjYsNiBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhYmVsKExh
YmVsKiBsMCkKIAogICAgIC8vIFRoaXMgZGlzYWJsZXMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyB3
aGVuIGFuIGluc3RydWN0aW9uIGlzIGEganVtcCB0YXJnZXQKICAgICBtX2xhc3RPcGNvZGVJRCA9
IG9wX2VuZDsKLSAgICByZXR1cm4gbDA7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC0xMzAzLDE1ICsxMzA5LDE0IEBAIHZvaWQg
QUxXQVlTX0lOTElORSBCeXRlY29kZUdlbmVyYXRvcjo6cmV3aW5kVW5hcnlPcCgpCiAgICAgbV9s
YXN0T3Bjb2RlSUQgPSBvcF9lbmQ7CiB9CiAKLVBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SnVtcChMYWJlbCogdGFyZ2V0KQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEp1bXAoTGFiZWwmIHRhcmdldCkKIHsKICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlv
bnMoKS5zaXplKCk7CiAgICAgZW1pdE9wY29kZShvcF9qbXApOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAg
IHJldHVybiB0YXJnZXQ7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJl
Z2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4gQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0
YXJnZXQpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmVHJ1ZShSZWdpc3RlcklE
KiBjb25kLCBMYWJlbCYgdGFyZ2V0KQogewogICAgIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9s
ZXNzKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKQEAgLTEzMjcsOCArMTMzMiw4IEBAIFBhc3NS
ZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmVHJ1ZShSZWdpc3RlcklE
KiBjb25kLCBMYWJlbCogdGFyCiAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2psZXNzKTsKICAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxSW5kZXgpOwogICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzJJbmRleCk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsK
LSAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQodGFyZ2V0LmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOworICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9
PSBvcF9sZXNzZXEpIHsKICAgICAgICAgaW50IGRzdEluZGV4OwpAQCAtMTM0NCw4ICsxMzQ5LDgg
QEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJl
Z2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXIKICAgICAgICAgICAgIGVtaXRPcGNvZGUob3Bfamxl
c3NlcSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMUluZGV4KTsKICAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMySW5kZXgpOwotICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9sYXN0
T3Bjb2RlSUQgPT0gb3BfZ3JlYXRlcikgewogICAgICAgICBpbnQgZHN0SW5kZXg7CkBAIC0xMzYx
LDggKzEzNjYsOCBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1
bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcgogICAgICAgICAgICAgZW1pdE9w
Y29kZShvcF9qZ3JlYXRlcik7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Jj
MUluZGV4KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMySW5kZXgpOwot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVjdGlv
bnMoKS5zaXplKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxz
ZSBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfZ3JlYXRlcmVxKSB7CiAgICAgICAgIGludCBkc3RJ
bmRleDsKQEAgLTEzNzgsMTAgKzEzODMsMTAgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXIKICAg
ICAgICAgICAgIGVtaXRPcGNvZGUob3BfamdyZWF0ZXJlcSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc3JjMUluZGV4KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChzcmMySW5kZXgpOwotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdl
dC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7Ci0gICAgICAgICAgICByZXR1
cm4gdGFyZ2V0OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5k
KGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfZXFfbnVsbCAmJiB0
YXJnZXQtPmlzRm9yd2FyZCgpKSB7CisgICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBv
cF9lcV9udWxsICYmIHRhcmdldC5pc0ZvcndhcmQoKSkgewogICAgICAgICBpbnQgZHN0SW5kZXg7
CiAgICAgICAgIGludCBzcmNJbmRleDsKIApAQCAtMTM5MywxMCArMTM5OCwxMCBAQCBQYXNzUmVm
UHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZlRydWUoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwqIHRhcgogICAgICAgICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOwogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qZXFfbnVsbCk7CiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOwotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KSk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bjb2Rl
SUQgPT0gb3BfbmVxX251bGwgJiYgdGFyZ2V0LT5pc0ZvcndhcmQoKSkgeworICAgIH0gZWxzZSBp
ZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfbmVxX251bGwgJiYgdGFyZ2V0LmlzRm9yd2FyZCgpKSB7
CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50IHNyY0luZGV4OwogCkBAIC0xNDA4
LDggKzE0MTMsOCBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1
bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcgogICAgICAgICAgICAgc2l6ZV90
IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgICAgICAgICAgZW1pdE9wY29kZShv
cF9qbmVxX251bGwpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyY0luZGV4
KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4s
IGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAg
ICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQuYmluZChiZWdpbiwgaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTE0MTcsMTMgKzE0MjIsMTIgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXIKIAogICAg
IGVtaXRPcGNvZGUob3BfanRydWUpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjb25kLT5p
bmRleCgpKTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBp
bnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKLSAgICByZXR1cm4gdGFyZ2V0OworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZCh0YXJnZXQuYmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7
CiB9CiAKLVBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmRmFs
c2UoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KQogewot
ICAgIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9sZXNzICYmIHRhcmdldC0+aXNGb3J3YXJkKCkp
IHsKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfbGVzcyAmJiB0YXJnZXQuaXNGb3J3YXJk
KCkpIHsKICAgICAgICAgaW50IGRzdEluZGV4OwogICAgICAgICBpbnQgc3JjMUluZGV4OwogICAg
ICAgICBpbnQgc3JjMkluZGV4OwpAQCAtMTQzNywxMCArMTQ0MSwxMCBAQCBQYXNzUmVmUHRyPExh
YmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNvbmQs
IExhYmVsKiB0YQogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qbmxlc3MpOwogICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzFJbmRleCk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc3JjMkluZGV4KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0
YXJnZXQuYmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX2xl
c3NlcSAmJiB0YXJnZXQtPmlzRm9yd2FyZCgpKSB7CisgICAgfSBlbHNlIGlmIChtX2xhc3RPcGNv
ZGVJRCA9PSBvcF9sZXNzZXEgJiYgdGFyZ2V0LmlzRm9yd2FyZCgpKSB7CiAgICAgICAgIGludCBk
c3RJbmRleDsKICAgICAgICAgaW50IHNyYzFJbmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsK
QEAgLTE0NTQsMTAgKzE0NTgsMTAgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCogdGEKICAgICAgICAg
ICAgIGVtaXRPcGNvZGUob3Bfam5sZXNzZXEpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKHNyYzFJbmRleCk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3Jj
MkluZGV4KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQo
YmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHRhcmdl
dDsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQuYmluZChiZWdpbiwg
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX2dyZWF0ZXIgJiYgdGFyZ2V0LT5p
c0ZvcndhcmQoKSkgeworICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfZ3JlYXRl
ciAmJiB0YXJnZXQuaXNGb3J3YXJkKCkpIHsKICAgICAgICAgaW50IGRzdEluZGV4OwogICAgICAg
ICBpbnQgc3JjMUluZGV4OwogICAgICAgICBpbnQgc3JjMkluZGV4OwpAQCAtMTQ3MSwxMCArMTQ3
NSwxMCBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZh
bHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YQogICAgICAgICAgICAgZW1pdE9wY29kZShv
cF9qbmdyZWF0ZXIpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzFJbmRl
eCk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMkluZGV4KTsKLSAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0
aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQuYmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KG1fbGFzdE9wY29kZUlEID09IG9wX2dyZWF0ZXJlcSAmJiB0YXJnZXQtPmlzRm9yd2FyZCgpKSB7
CisgICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9ncmVhdGVyZXEgJiYgdGFyZ2V0
LmlzRm9yd2FyZCgpKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50IHNyYzFJ
bmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsKQEAgLTE0ODgsOCArMTQ5Miw4IEBAIFBhc3NS
ZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmRmFsc2UoUmVnaXN0ZXJJ
RCogY29uZCwgTGFiZWwqIHRhCiAgICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2puZ3JlYXRlcmVx
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMxSW5kZXgpOwogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzJJbmRleCk7Ci0gICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpKTsKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQodGFyZ2V0LmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2xhc3RPcGNv
ZGVJRCA9PSBvcF9ub3QpIHsKICAgICAgICAgaW50IGRzdEluZGV4OwpAQCAtMTUwMywxMCArMTUw
NywxMCBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZh
bHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YQogICAgICAgICAgICAgc2l6ZV90IGJlZ2lu
ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qdHJ1
ZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOwotICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5z
aXplKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAo
bV9sYXN0T3Bjb2RlSUQgPT0gb3BfZXFfbnVsbCAmJiB0YXJnZXQtPmlzRm9yd2FyZCgpKSB7Cisg
ICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9lcV9udWxsICYmIHRhcmdldC5pc0Zv
cndhcmQoKSkgewogICAgICAgICBpbnQgZHN0SW5kZXg7CiAgICAgICAgIGludCBzcmNJbmRleDsK
IApAQCAtMTUxOCwxMCArMTUyMiwxMCBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YQogICAgICAg
ICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgICAgICAgICAg
ZW1pdE9wY29kZShvcF9qbmVxX251bGwpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHNyY0luZGV4KTsKLSAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQt
PmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAgICAgICAgICAgcmV0dXJu
IHRhcmdldDsKKyAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0YXJnZXQuYmluZChi
ZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX25lcV9udWxsICYmIHRh
cmdldC0+aXNGb3J3YXJkKCkpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9w
X25lcV9udWxsICYmIHRhcmdldC5pc0ZvcndhcmQoKSkgewogICAgICAgICBpbnQgZHN0SW5kZXg7
CiAgICAgICAgIGludCBzcmNJbmRleDsKIApAQCAtMTUzMyw0MCArMTUzNywzNyBAQCBQYXNzUmVm
UHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQq
IGNvbmQsIExhYmVsKiB0YQogICAgICAgICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOwogICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qZXFfbnVsbCk7CiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOwotICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KSk7Ci0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIHNpemVfdCBiZWdpbiA9
IGluc3RydWN0aW9ucygpLnNpemUoKTsKICAgICBlbWl0T3Bjb2RlKG9wX2pmYWxzZSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNvbmQtPmluZGV4KCkpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwotICAg
IHJldHVybiB0YXJnZXQ7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJl
Z2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4gQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29u
ZCwgTGFiZWwqIHRhcmdldCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RG
dW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCkKIHsKICAgICBzaXpl
X3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAKICAgICBlbWl0T3Bjb2RlKG9wX2pu
ZXFfcHRyKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29uZC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKFNwZWNpYWw6OkNhbGxGdW5jdGlvbik7Ci0gICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgcmV0
dXJuIHRhcmdldDsKIH0KIAotUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXJnZXQp
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShSZWdp
c3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KQogewogICAgIHNpemVfdCBiZWdpbiA9IGluc3Ry
dWN0aW9ucygpLnNpemUoKTsKIAogICAgIGVtaXRPcGNvZGUob3Bfam5lcV9wdHIpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChjb25kLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoU3BlY2lhbDo6QXBwbHlGdW5jdGlvbik7Ci0gICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgcmV0dXJuIHRhcmdldDsKIH0K
IAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYg
aWRlbnQpIGNvbnN0CkBAIC0yNzc5LDI2ICsyNzgwLDI2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0RGVsZXRlQnlJZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpID4gMDsgaS0tKSB7
Ci0gICAgICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaSAt
IDFdLmdldCgpOwotICAgICAgICBpZiAoY29udGV4dC0+bG9jYWwoKSAhPSBwcm9wZXJ0eSkKKyAg
ICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tpIC0gMV0u
Z2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LmxvY2FsKCkgIT0gcHJvcGVydHkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIWNvbnRleHQtPmlzVmFsaWQoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LmlzVmFsaWQoKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IGlmIChjb250ZXh0LT50eXBlKCkgPT0gRm9ySW5Db250ZXh0OjpJbmRleGVkRm9ySW5Db250ZXh0
VHlwZSkgewotICAgICAgICAgICAgcHJvcGVydHkgPSBzdGF0aWNfY2FzdDxJbmRleGVkRm9ySW5D
b250ZXh0Kj4oY29udGV4dCktPmluZGV4KCk7CisgICAgICAgIGlmIChjb250ZXh0LnR5cGUoKSA9
PSBGb3JJbkNvbnRleHQ6OkluZGV4ZWRGb3JJbkNvbnRleHRUeXBlKSB7CisgICAgICAgICAgICBw
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PEluZGV4ZWRGb3JJbkNvbnRleHQmPihjb250ZXh0KS5pbmRl
eCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQoY29u
dGV4dC0+dHlwZSgpID09IEZvckluQ29udGV4dDo6U3RydWN0dXJlRm9ySW5Db250ZXh0VHlwZSk7
Ci0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29udGV4dCA9IHN0YXRp
Y19jYXN0PFN0cnVjdHVyZUZvckluQ29udGV4dCo+KGNvbnRleHQpOworICAgICAgICBBU1NFUlQo
Y29udGV4dC50eXBlKCkgPT0gRm9ySW5Db250ZXh0OjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHRUeXBl
KTsKKyAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Jj4oY29udGV4dCk7CiAgICAgICAgIFVubGlu
a2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfZ2V0X2RpcmVj
dF9wbmFtZSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwogICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAgICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0LT5pbmRleCgpLT5pbmRleCgpKTsKLSAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKS0+aW5k
ZXgoKSk7CisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzdHJ1Y3R1cmVDb250ZXh0Lmlu
ZGV4KCktPmluZGV4KCkpOworICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3RydWN0dXJl
Q29udGV4dC5lbnVtZXJhdG9yKCktPmluZGV4KCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvZmlsZSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQpAQCAtMzI3Myw5ICsz
Mjc0LDkgQEAgRXhwZWN0ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZXhwZWN0ZWRGdW5j
dGlvbkZvcklkZW50aWZpZXIoY29uc3QgSWRlbnRpZmkKICAgICByZXR1cm4gTm9FeHBlY3RlZEZ1
bmN0aW9uOwogfQogCi1FeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhw
ZWN0ZWRGdW5jdGlvblNuaXBwZXQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBmdW5jLCBF
eHBlY3RlZEZ1bmN0aW9uIGV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmIGNhbGxBcmd1
bWVudHMsIExhYmVsKiBkb25lKQorRXhwZWN0ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
ZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiBleHBlY3RlZEZ1bmN0aW9uLCBDYWxsQXJndW1lbnRzJiBj
YWxsQXJndW1lbnRzLCBMYWJlbCYgZG9uZSkKIHsKLSAgICBSZWZQdHI8TGFiZWw+IHJlYWxDYWxs
ID0gbmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IHJlYWxDYWxsID0gbmV3TGFiZWwoKTsKICAg
ICBzd2l0Y2ggKGV4cGVjdGVkRnVuY3Rpb24pIHsKICAgICBjYXNlIEV4cGVjdE9iamVjdENvbnN0
cnVjdG9yOiB7CiAgICAgICAgIC8vIElmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlzIG5vbi16
ZXJvLCB0aGVuIHdlIGNhbid0IGRvIGFueXRoaW5nIGludGVyZXN0aW5nLgpAQCAtMzMzMiw3ICsz
MzMzLDcgQEAgRXhwZWN0ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEV4cGVjdGVk
RnVuY3Rpb25TbmlwcGV0KFJlZ2lzdGVySUQqIGRzdCwKICAgICAKICAgICBzaXplX3QgYmVnaW4g
PSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CiAgICAgZW1pdE9wY29kZShvcF9qbXApOwotICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkb25lLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXpl
KCkpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9uZS5iaW5kKGJlZ2luLCBpbnN0cnVj
dGlvbnMoKS5zaXplKCkpKTsKICAgICBlbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwogICAgIAog
ICAgIHJldHVybiBleHBlY3RlZEZ1bmN0aW9uOwpAQCAtMzM2OSw3ICszMzcwLDcgQEAgUmVnaXN0
ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE9wY29kZUlEIG9wY29kZUlELCBSZWdp
c3RlcklEKiBkc3QsIFJlZ2kKIAogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwogCi0gICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3TGFiZWwoKTsK
KyAgICBSZWY8TGFiZWw+IGRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24g
PSBlbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkb25lLmdldCgpKTsKICAgICAKICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsKQpAQCAtMzUyNiwxNSArMzUyNywxNSBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdpc3RlcklEKiBzcmMsIFJldHVybkZyb20gZnJvbSkK
ICAgICAgICAgICAgIGVtaXRURFpDaGVjayhzcmMpOwogCiAgICAgICAgIGlmICghc3JjSXNUaGlz
IHx8IGZyb20gPT0gUmV0dXJuRnJvbTo6RmluYWxseSkgewotICAgICAgICAgICAgUmVmUHRyPExh
YmVsPiBpc09iamVjdExhYmVsID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgIFJlZjxMYWJlbD4g
aXNPYmplY3RMYWJlbCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICBlbWl0SnVtcElmVHJ1ZShl
bWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHNyYyksIGlzT2JqZWN0TGFiZWwuZ2V0KCkpOwog
CiAgICAgICAgICAgICBpZiAobWlnaHRCZURlcml2ZWQpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQobV9pc0Rlcml2ZWRDb25zdHVjdG9yKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+
IHJldHVyblRoaXMgPSBuZXdMYWJlbCgpOworICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4gcmV0
dXJuVGhpcyA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICAgICAgZW1pdEp1bXBJZkZhbHNlKG1f
aXNEZXJpdmVkQ29uc3R1Y3RvciwgcmV0dXJuVGhpcy5nZXQoKSk7CiAgICAgICAgICAgICAgICAg
Ly8gRWxzZSwgd2UncmUgYSBkZXJpdmVkIGNvbnN0cnVjdG9yIGhlcmUuCi0gICAgICAgICAgICAg
ICAgUmVmUHRyPExhYmVsPiBpc1VuZGVmaW5lZExhYmVsID0gbmV3TGFiZWwoKTsKKyAgICAgICAg
ICAgICAgICBSZWY8TGFiZWw+IGlzVW5kZWZpbmVkTGFiZWwgPSBuZXdMYWJlbCgpOwogICAgICAg
ICAgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgaXNVbmRlZmluZWRMYWJlbC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZW1pdFRocm93
VHlwZUVycm9yKCJDYW5ub3QgcmV0dXJuIGEgbm9uLW9iamVjdCB0eXBlIGluIHRoZSBjb25zdHJ1
Y3RvciBvZiBhIGRlcml2ZWQgY2xhc3MuIik7CiAgICAgICAgICAgICAgICAgZW1pdExhYmVsKGlz
VW5kZWZpbmVkTGFiZWwuZ2V0KCkpOwpAQCAtMzU4NCw3ICszNTg1LDcgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBmdW5jLAogCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBkaXZvdFN0YXJ0LCBk
aXZvdEVuZCk7CiAgICAgCi0gICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3TGFiZWwoKTsKKyAg
ICBSZWY8TGFiZWw+IGRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBl
bWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkb25lLmdldCgpKTsKIAogICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHBy
b2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY29uc3RydWN0KTsKQEAgLTM3MDMsNyArMzcw
NCw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRXaWxsTGVhdmVDYWxsRnJhbWVEZWJ1
Z0hvb2soKQogICAgIGVtaXREZWJ1Z0hvb2soV2lsbExlYXZlQ2FsbEZyYW1lLCBtX3Njb3BlTm9k
ZS0+bGFzdExpbmUoKSwgbV9zY29wZU5vZGUtPnN0YXJ0T2Zmc2V0KCksIG1fc2NvcGVOb2RlLT5s
aW5lU3RhcnRPZmZzZXQoKSk7CiB9CiAKLUZpbmFsbHlDb250ZXh0KiBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKExhYmVsKiBmaW5hbGx5TGFiZWwpCitGaW5h
bGx5Q29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29w
ZShMYWJlbCYgZmluYWxseUxhYmVsKQogewogICAgIC8vIFJlY2xhaW0gZnJlZSBsYWJlbCBzY29w
ZXMuCiAgICAgd2hpbGUgKG1fbGFiZWxTY29wZXMuc2l6ZSgpICYmICFtX2xhYmVsU2NvcGVzLmxh
c3QoKS5yZWZDb3VudCgpKQpAQCAtMzc1MiwyMCArMzc1MywxNiBAQCBMYWJlbFNjb3BlUHRyIEJ5
dGVjb2RlR2VuZXJhdG9yOjpicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJiBuYW1lKQogICAg
IGlmIChuYW1lLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGludCBpID0gbV9sYWJlbFNjb3Bl
cy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgTGFiZWxTY29wZSogc2Nv
cGUgPSAmbV9sYWJlbFNjb3Blc1tpXTsKLSAgICAgICAgICAgIGlmIChzY29wZS0+dHlwZSgpICE9
IExhYmVsU2NvcGU6Ok5hbWVkTGFiZWwpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc2NvcGUt
PmJyZWFrVGFyZ2V0KCkpOworICAgICAgICAgICAgaWYgKHNjb3BlLT50eXBlKCkgIT0gTGFiZWxT
Y29wZTo6TmFtZWRMYWJlbCkKICAgICAgICAgICAgICAgICByZXR1cm4gTGFiZWxTY29wZVB0ciht
X2xhYmVsU2NvcGVzLCBpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1
cm4gTGFiZWxTY29wZVB0cjo6bnVsbCgpOwogICAgIH0KIAogICAgIGZvciAoaW50IGkgPSBtX2xh
YmVsU2NvcGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIExhYmVsU2NvcGUq
IHNjb3BlID0gJm1fbGFiZWxTY29wZXNbaV07Ci0gICAgICAgIGlmIChzY29wZS0+bmFtZSgpICYm
ICpzY29wZS0+bmFtZSgpID09IG5hbWUpIHsKLSAgICAgICAgICAgIEFTU0VSVChzY29wZS0+YnJl
YWtUYXJnZXQoKSk7CisgICAgICAgIGlmIChzY29wZS0+bmFtZSgpICYmICpzY29wZS0+bmFtZSgp
ID09IG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gTGFiZWxTY29wZVB0cihtX2xhYmVsU2NvcGVz
LCBpKTsKLSAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gTGFiZWxTY29wZVB0cjo6bnVsbCgp
OwogfQpAQCAtMzgyNiwzNCArMzgyMywzMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjphbGxv
Y2F0ZUFuZEVtaXRTY29wZSgpCiAgICAgZW1pdE1vdmUobV90b3BNb3N0U2NvcGUsIHNjb3BlUmVn
aXN0ZXIoKSk7CiB9CiAKLVRyeURhdGEqIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoVHJ5KExhYmVs
KiBzdGFydCwgTGFiZWwqIGhhbmRsZXJMYWJlbCwgSGFuZGxlclR5cGUgaGFuZGxlclR5cGUpCitU
cnlEYXRhKiBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFRyeShMYWJlbCYgc3RhcnQsIExhYmVsJiBo
YW5kbGVyTGFiZWwsIEhhbmRsZXJUeXBlIGhhbmRsZXJUeXBlKQogewotICAgIFRyeURhdGEgdHJ5
RGF0YTsKLSAgICB0cnlEYXRhLnRhcmdldCA9IGhhbmRsZXJMYWJlbDsKLSAgICB0cnlEYXRhLmhh
bmRsZXJUeXBlID0gaGFuZGxlclR5cGU7Ci0gICAgbV90cnlEYXRhLmFwcGVuZCh0cnlEYXRhKTsK
KyAgICBtX3RyeURhdGEuYXBwZW5kKFRyeURhdGEgeyBoYW5kbGVyTGFiZWwsIGhhbmRsZXJUeXBl
IH0pOwogICAgIFRyeURhdGEqIHJlc3VsdCA9ICZtX3RyeURhdGEubGFzdCgpOwogICAgIAotICAg
IFRyeUNvbnRleHQgdHJ5Q29udGV4dDsKLSAgICB0cnlDb250ZXh0LnN0YXJ0ID0gc3RhcnQ7Ci0g
ICAgdHJ5Q29udGV4dC50cnlEYXRhID0gcmVzdWx0OwotICAgIAotICAgIG1fdHJ5Q29udGV4dFN0
YWNrLmFwcGVuZCh0cnlDb250ZXh0KTsKKyAgICBtX3RyeUNvbnRleHRTdGFjay5hcHBlbmQoVHJ5
Q29udGV4dCB7CisgICAgICAgIHN0YXJ0LAorICAgICAgICByZXN1bHQKKyAgICB9KTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BUcnko
VHJ5RGF0YSogdHJ5RGF0YSwgTGFiZWwqIGVuZCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cFRyeShUcnlEYXRhKiB0cnlEYXRhLCBMYWJlbCYgZW5kKQogewogICAgIG1fdXNlc0V4Y2VwdGlv
bnMgPSB0cnVlOwogICAgIAogICAgIEFTU0VSVF9VTlVTRUQodHJ5RGF0YSwgbV90cnlDb250ZXh0
U3RhY2subGFzdCgpLnRyeURhdGEgPT0gdHJ5RGF0YSk7CiAgICAgCi0gICAgVHJ5UmFuZ2UgdHJ5
UmFuZ2U7Ci0gICAgdHJ5UmFuZ2Uuc3RhcnQgPSBtX3RyeUNvbnRleHRTdGFjay5sYXN0KCkuc3Rh
cnQ7Ci0gICAgdHJ5UmFuZ2UuZW5kID0gZW5kOwotICAgIHRyeVJhbmdlLnRyeURhdGEgPSBtX3Ry
eUNvbnRleHRTdGFjay5sYXN0KCkudHJ5RGF0YTsKLSAgICBtX3RyeVJhbmdlcy5hcHBlbmQodHJ5
UmFuZ2UpOworICAgIG1fdHJ5UmFuZ2VzLmFwcGVuZChUcnlSYW5nZSB7CisgICAgICAgIG1fdHJ5
Q29udGV4dFN0YWNrLmxhc3QoKS5zdGFydC5jb3B5UmVmKCksCisgICAgICAgIGVuZCwKKyAgICAg
ICAgbV90cnlDb250ZXh0U3RhY2subGFzdCgpLnRyeURhdGEKKyAgICB9KTsKICAgICBtX3RyeUNv
bnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKQEAgLTQwNTMsNyArNDA0Niw3IEBAIHN0YXRp
YyBpbnQzMl90IGtleUZvckNoYXJhY3RlclN3aXRjaChFeHByZXNzaW9uTm9kZSogbm9kZSwgaW50
MzJfdCBtaW4sIGludDMyX3QKIAogc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBUYWJsZUZvclN3aXRj
aCgKICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYganVtcFRhYmxlLCBpbnQzMl90IHN3aXRj
aEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LAotICAgIFJlZlB0cjxMYWJlbD4qIGxhYmVs
cywgRXhwcmVzc2lvbk5vZGUqKiBub2RlcywgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4LAorICAg
IGNvbnN0IFZlY3RvcjxSZWY8TGFiZWw+LCA4PiYgbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5v
ZGVzLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgsCiAgICAgaW50MzJfdCAoKmtleUdldHRlciko
RXhwcmVzc2lvbk5vZGUqLCBpbnQzMl90IG1pbiwgaW50MzJfdCBtYXgpKQogewogICAgIGp1bXBU
YWJsZS5taW4gPSBtaW47CkBAIC00MDY3LDcgKzQwNjAsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJl
SnVtcFRhYmxlRm9yU3dpdGNoKAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgcHJlcGFyZUp1bXBU
YWJsZUZvclN0cmluZ1N3aXRjaChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYganVtcFRhYmxlLCBp
bnQzMl90IHN3aXRjaEFkZHJlc3MsIHVpbnQzMl90IGNsYXVzZUNvdW50LCBSZWZQdHI8TGFiZWw+
KiBsYWJlbHMsIEV4cHJlc3Npb25Ob2RlKiogbm9kZXMpCitzdGF0aWMgdm9pZCBwcmVwYXJlSnVt
cFRhYmxlRm9yU3RyaW5nU3dpdGNoKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFibGUs
IGludDMyX3Qgc3dpdGNoQWRkcmVzcywgdWludDMyX3QgY2xhdXNlQ291bnQsIGNvbnN0IFZlY3Rv
cjxSZWY8TGFiZWw+LCA4PiYgbGFiZWxzLCBFeHByZXNzaW9uTm9kZSoqIG5vZGVzKQogewogICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjbGF1c2VDb3VudDsgKytpKSB7CiAgICAgICAgIC8v
IFdlJ3JlIGVtaXR0aW5nIHRoaXMgYWZ0ZXIgdGhlIGNsYXVzZSBsYWJlbHMgc2hvdWxkIGhhdmUg
YmVlbiBmaXhlZCwgc28gCkBAIC00MDgwLDcgKzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwcmVwYXJl
SnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBqdW1wVGFi
bGUsCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMy
X3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBu
b2RlcywgTGFiZWwqIGRlZmF1bHRMYWJlbCwgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQordm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW5kU3dpdGNoKHVpbnQzMl90IGNsYXVzZUNvdW50LCBjb25z
dCBWZWN0b3I8UmVmPExhYmVsPiwgOD4mIGxhYmVscywgRXhwcmVzc2lvbk5vZGUqKiBub2Rlcywg
TGFiZWwmIGRlZmF1bHRMYWJlbCwgaW50MzJfdCBtaW4sIGludDMyX3QgbWF4KQogewogICAgIFN3
aXRjaEluZm8gc3dpdGNoSW5mbyA9IG1fc3dpdGNoQ29udGV4dFN0YWNrLmxhc3QoKTsKICAgICBt
X3N3aXRjaENvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC00MDg5LDcgKzQwODIsNyBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbmRTd2l0Y2godWludDMyX3QgY2xhdXNlQ291bnQsIFJl
ZlB0cjxMYWJlbD4qIGxhYmVscywgRQogICAgIGNhc2UgU3dpdGNoSW5mbzo6U3dpdGNoSW1tZWRp
YXRlOgogICAgIGNhc2UgU3dpdGNoSW5mbzo6U3dpdGNoQ2hhcmFjdGVyOiB7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAxXSA9IG1fY29kZUJsb2Nr
LT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKClbc3dp
dGNoSW5mby5ieXRlY29kZU9mZnNldCArIDJdID0gZGVmYXVsdExhYmVsLT5iaW5kKHN3aXRjaElu
Zm8uYnl0ZWNvZGVPZmZzZXQsIHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAzKTsKKyAgICAg
ICAgaW5zdHJ1Y3Rpb25zKClbc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCArIDJdID0gZGVmYXVs
dExhYmVsLmJpbmQoc3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgc3dpdGNoSW5mby5ieXRlY29k
ZU9mZnNldCArIDMpOwogCiAgICAgICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBqdW1wVGFi
bGUgPSBtX2NvZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIHByZXBhcmVK
dW1wVGFibGVGb3JTd2l0Y2goCkBAIC00MTAyLDcgKzQwOTUsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbmRTd2l0Y2godWludDMyX3QgY2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qIGxh
YmVscywgRQogICAgICAgICAKICAgICBjYXNlIFN3aXRjaEluZm86OlN3aXRjaFN0cmluZzogewog
ICAgICAgICBpbnN0cnVjdGlvbnMoKVtzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0ICsgMV0gPSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCk7Ci0gICAgICAgIGlu
c3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAyXSA9IGRlZmF1bHRMYWJl
bC0+YmluZChzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zmc2V0LCBzd2l0Y2hJbmZvLmJ5dGVjb2RlT2Zm
c2V0ICsgMyk7CisgICAgICAgIGluc3RydWN0aW9ucygpW3N3aXRjaEluZm8uYnl0ZWNvZGVPZmZz
ZXQgKyAyXSA9IGRlZmF1bHRMYWJlbC5iaW5kKHN3aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQsIHN3
aXRjaEluZm8uYnl0ZWNvZGVPZmZzZXQgKyAzKTsKIAogICAgICAgICBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYganVtcFRhYmxlID0gbV9jb2RlQmxvY2stPmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSgpOwogICAgICAgICBwcmVwYXJlSnVtcFRhYmxlRm9yU3RyaW5nU3dpdGNoKGp1bXBUYWJsZSwg
c3dpdGNoSW5mby5ieXRlY29kZU9mZnNldCwgY2xhdXNlQ291bnQsIGxhYmVscywgbm9kZXMpOwpA
QCAtNDE1NywxMiArNDE1MCwxMiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3NpbwogICAgICAgICBl
bWl0Q2FsbChpdGVyYXRvci5nZXQoKSwgaXRlcmF0b3IuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgYXJncywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVu
ZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwogICAgIH0KIAotICAgIFJlZlB0cjxMYWJlbD4gbG9v
cERvbmUgPSBuZXdMYWJlbCgpOwotICAgIFJlZlB0cjxMYWJlbD4gdHJ5U3RhcnRMYWJlbCA9IG5l
d0xhYmVsKCk7Ci0gICAgUmVmUHRyPExhYmVsPiBmaW5hbGx5VmlhVGhyb3dMYWJlbCA9IG5ld0xh
YmVsKCk7Ci0gICAgUmVmUHRyPExhYmVsPiBmaW5hbGx5TGFiZWwgPSBuZXdMYWJlbCgpOwotICAg
IFJlZlB0cjxMYWJlbD4gY2F0Y2hMYWJlbCA9IG5ld0xhYmVsKCk7Ci0gICAgUmVmUHRyPExhYmVs
PiBlbmRDYXRjaExhYmVsID0gbmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGxvb3BEb25lID0g
bmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IHRyeVN0YXJ0TGFiZWwgPSBuZXdMYWJlbCgpOwor
ICAgIFJlZjxMYWJlbD4gZmluYWxseVZpYVRocm93TGFiZWwgPSBuZXdMYWJlbCgpOworICAgIFJl
ZjxMYWJlbD4gZmluYWxseUxhYmVsID0gbmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGNhdGNo
TGFiZWwgPSBuZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gZW5kQ2F0Y2hMYWJlbCA9IG5ld0xh
YmVsKCk7CiAKICAgICAvLyBSZWZQdHI8UmVnaXN0ZXI+IGl0ZXJhdG9yJ3MgbGlmZXRpbWUgbXVz
dCBiZSBsb25nZXIgdGhhbiBJdGVyYXRvckNsb3NlQ29udGV4dC4KICAgICBGaW5hbGx5Q29udGV4
dCogZmluYWxseUNvbnRleHQgPSBwdXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoZmluYWxseUxh
YmVsLmdldCgpKTsKQEAgLTQxNzIsMTYgKzQxNjUsMTYgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNz
aW8KICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbmV3VGVtcG9yYXJ5KCk7CiAg
ICAgICAgIGVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKIAotICAgICAgICBl
bWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGVtaXRKdW1wKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7CiAKLSAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQg
PSBuZXdMYWJlbCgpOworICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IG5ld0xhYmVsKCk7
CiAgICAgICAgIGVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwogICAgICAgICBlbWl0TG9vcEhp
bnQoKTsKIAogICAgICAgICBlbWl0TGFiZWwodHJ5U3RhcnRMYWJlbC5nZXQoKSk7CiAgICAgICAg
IFRyeURhdGEqIHRyeURhdGEgPSBwdXNoVHJ5KHRyeVN0YXJ0TGFiZWwuZ2V0KCksIGZpbmFsbHlW
aWFUaHJvd0xhYmVsLmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhlc2l6ZWRGaW5hbGx5KTsKICAg
ICAgICAgY2FsbEJhY2soKnRoaXMsIHZhbHVlLmdldCgpKTsKLSAgICAgICAgZW1pdEp1bXAoc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBlbWl0SnVtcCgqc2NvcGUtPmNvbnRpbnVl
VGFyZ2V0KCkpOwogCiAgICAgICAgIC8vIEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIGFicnVw
dCBjb21wbGV0aW9ucy4KICAgICAgICAgewpAQCAtNDE4OSw3ICs0MTgyLDcgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBu
b2RlLCBFeHByZXNzaW8KICAgICAgICAgICAgIGVtaXRMYWJlbChmaW5hbGx5VmlhVGhyb3dMYWJl
bC5nZXQoKSk7CiAgICAgICAgICAgICBwb3BUcnkodHJ5RGF0YSwgZmluYWxseVZpYVRocm93TGFi
ZWwuZ2V0KCkpOwogCi0gICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGZpbmFsbHlCb2R5TGFiZWwg
PSBuZXdMYWJlbCgpOworICAgICAgICAgICAgUmVmPExhYmVsPiBmaW5hbGx5Qm9keUxhYmVsID0g
bmV3TGFiZWwoKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbGx5RXhjZXB0
aW9uUmVnaXN0ZXIgPSBuZXdUZW1wb3JhcnkoKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIHVu
dXNlZCA9IG5ld1RlbXBvcmFyeSgpOwogCkBAIC00MjA0LDEyICs0MTk3LDEyIEBAIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSwgRXhwcmVzc2lvCiAgICAgICAgICAgICBlbWl0TGFiZWwoZmluYWxseUJvZHlMYWJlbC5n
ZXQoKSk7CiAgICAgICAgICAgICByZXN0b3JlU2NvcGVSZWdpc3RlcigpOwogCi0gICAgICAgICAg
ICBSZWZQdHI8TGFiZWw+IGZpbmFsbHlEb25lID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgIFJl
ZjxMYWJlbD4gZmluYWxseURvbmUgPSBuZXdMYWJlbCgpOwogCiAgICAgICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0
ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7CiAgICAgICAgICAg
ICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVybk1l
dGhvZC5nZXQoKSksIGZpbmFsbHlEb25lLmdldCgpKTsKIAotICAgICAgICAgICAgUmVmUHRyPExh
YmVsPiByZXR1cm5DYWxsVHJ5U3RhcnQgPSBuZXdMYWJlbCgpOworICAgICAgICAgICAgUmVmPExh
YmVsPiByZXR1cm5DYWxsVHJ5U3RhcnQgPSBuZXdMYWJlbCgpOwogICAgICAgICAgICAgZW1pdExh
YmVsKHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7CiAgICAgICAgICAgICBUcnlEYXRhKiByZXR1
cm5DYWxsVHJ5RGF0YSA9IHB1c2hUcnkocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpLCBjYXRjaExh
YmVsLmdldCgpLCBIYW5kbGVyVHlwZTo6U3ludGhlc2l6ZWRDYXRjaCk7CiAKQEAgLTQyMzgsNyAr
NDIzMSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2Fi
bGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVzc2lvCiAgICAgICAgICAgICAgICAgLy8gdG8g
cmVzb2x2ZSBhbnkgc3ltYm9scyBmcm9tIHRoZSBzY29wZSwgd2UgY2FuIHNraXAgcmVzdG9yaW5n
IHRoZSBzY29wZQogICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGhlcmUuCiAKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8TGFiZWw+IHRocm93TGFiZWwgPSBuZXdMYWJlbCgpOworICAgICAgICAg
ICAgICAgIFJlZjxMYWJlbD4gdGhyb3dMYWJlbCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICAg
ICAgZW1pdEp1bXBJZlRydWUoZW1pdElzRW1wdHkobmV3VGVtcG9yYXJ5KCksIGZpbmFsbHlFeGNl
cHRpb25SZWdpc3Rlci5nZXQoKSksIHRocm93TGFiZWwuZ2V0KCkpOwogICAgICAgICAgICAgICAg
IGVtaXRNb3ZlKGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpLCBmaW5hbGx5RXhjZXB0aW9uUmVnaXN0
ZXIuZ2V0KCkpOwogCkBAIC00MjQ5LDcgKzQyNDIsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3Np
bwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVsKCpzY29wZS0+Y29udGludWVUYXJn
ZXQoKSk7CiAgICAgICAgIGlmIChmb3JMb29wTm9kZSkgewogICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZm9yTG9vcE5vZGUtPmlzRm9yT2ZOb2RlKCkpOwogICAgICAgICAgICAgcHJlcGFyZUxl
eGljYWxTY29wZUZvck5leHRGb3JMb29wSXRlcmF0aW9uKGZvckxvb3BOb2RlLCBmb3JMb29wU3lt
Ym9sVGFibGUpOwpAQCAtNDQyOCw3ICs0NDIxLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRJdGVyYXRvck5leHQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpdGUK
ICAgICAgICAgZW1pdENhbGwoZHN0LCBuZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5l
eHRBcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2
b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKICAgICB9CiAgICAgewotICAgICAgICBSZWZQ
dHI8TGFiZWw+IHR5cGVJc09iamVjdCA9IG5ld0xhYmVsKCk7CisgICAgICAgIFJlZjxMYWJlbD4g
dHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwoKTsKICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElz
T2JqZWN0KG5ld1RlbXBvcmFyeSgpLCBkc3QpLCB0eXBlSXNPYmplY3QuZ2V0KCkpOwogICAgICAg
ICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJm
YWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOwogICAgICAgICBlbWl0TGFiZWwodHlwZUlzT2JqZWN0
LmdldCgpKTsKQEAgLTQ0NDYsNyArNDQzOSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SXRlcmF0b3JOZXh0V2l0aFZhbHVlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0CiAg
ICAgICAgIGVtaXRDYWxsKGRzdCwgbmV4dC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0
QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90
RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CiAgICAgfQogICAgIHsKLSAgICAgICAgUmVmUHRy
PExhYmVsPiB0eXBlSXNPYmplY3QgPSBuZXdMYWJlbCgpOworICAgICAgICBSZWY8TGFiZWw+IHR5
cGVJc09iamVjdCA9IG5ld0xhYmVsKCk7CiAgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09i
amVjdChuZXdUZW1wb3JhcnkoKSwgZHN0KSwgdHlwZUlzT2JqZWN0LmdldCgpKTsKICAgICAgICAg
ZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFj
ZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKICAgICAgICAgZW1pdExhYmVsKHR5cGVJc09iamVjdC5n
ZXQoKSk7CkBAIC00NDU2LDcgKzQ0NDksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEl0ZXJhdG9yTmV4dFdpdGhWYWx1ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdAogCiB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXRlcmF0b3JDbG9zZShSZWdpc3RlcklEKiBpdGVy
YXRvciwgY29uc3QgVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUpCiB7Ci0gICAgUmVmUHRy
PExhYmVsPiBkb25lID0gbmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGRvbmUgPSBuZXdMYWJl
bCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IsIHByb3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsK
ICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVy
bk1ldGhvZC5nZXQoKSksIGRvbmUuZ2V0KCkpOwogCkBAIC00NDczLDcgKzQ0NjYsNyBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9j
YWxSZWdpc3RlciwgUmVnaXN0ZQogewogICAgIGlmICghbG9jYWxSZWdpc3RlcikKICAgICAgICAg
cmV0dXJuOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKG5ldyBJbmRl
eGVkRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIpKSk7CisgICAgbV9m
b3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5ldyBJbmRleGVkRm9ySW5Db250ZXh0
KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIpKSk7CiB9CiAKIHZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCkBA
IC00NTgzLDcgKzQ1NzYsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJl
Rm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpcwogewogICAgIGlmICgh
bG9jYWxSZWdpc3RlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2su
YXBwZW5kKGFkb3B0UmVmKG5ldyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQobG9jYWxSZWdpc3Rlciwg
aW5kZXhSZWdpc3RlciwgcHJvcGVydHlSZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyKSkpOwor
ICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgU3RydWN0dXJlRm9y
SW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIsIHByb3BlcnR5UmVnaXN0ZXIs
IGVudW1lcmF0b3JSZWdpc3RlcikpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9w
U3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQpAQCAtNDYwNywx
MCArNDYwMCwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjppbnZhbGlkYXRlRm9ySW5Db250
ZXh0Rm9yTG9jYWwoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcgogICAgIC8vIHJlYXNzaWduZWQs
IG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2
YXJpYWJsZSBoYWQgYmVlbiAKICAgICAvLyByZWFzc2lnbmVkIGZyb20gaXRzIG9yaWdpbmFsIHZh
bHVlLgogICAgIGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKTsgaSA+
IDA7IGktLSkgewotICAgICAgICBGb3JJbkNvbnRleHQqIGNvbnRleHQgPSBtX2ZvckluQ29udGV4
dFN0YWNrW2kgLSAxXS5nZXQoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmxvY2FsKCkgIT0gbG9j
YWxSZWdpc3RlcikKKyAgICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0ID0gbV9mb3JJbkNvbnRl
eHRTdGFja1tpIC0gMV0uZ2V0KCk7CisgICAgICAgIGlmIChjb250ZXh0LmxvY2FsKCkgIT0gbG9j
YWxSZWdpc3RlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb250ZXh0LT5pbnZh
bGlkYXRlKCk7CisgICAgICAgIGNvbnRleHQuaW52YWxpZGF0ZSgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiB9CkBAIC00NjM0LDcgKzQ2MjcsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UmVxdWlyZU9iamVjdENvZXJjaWJsZShSZWdpc3RlcklEKiB2YWx1ZSwgY29uc3QgU3RyaQog
ewogICAgIC8vIEZJWE1FOiBvcF9qbmVxX251bGwgdHJlYXRzICJ1bmRldGVjdGFibGUiIG9iamVj
dHMgYXMgbnVsbC91bmRlZmluZWQuIFJlcXVpcmVPYmplY3RDb2VyY2libGUKICAgICAvLyB0aHVz
IGluY29ycmVjdGx5IHRocm93cyBhIFR5cGVFcnJvciBmb3IgaW50ZXJmYWNlcyBsaWtlIEhUTUxB
bGxDb2xsZWN0aW9uLgotICAgIFJlZlB0cjxMYWJlbD4gdGFyZ2V0ID0gbmV3TGFiZWwoKTsKKyAg
ICBSZWY8TGFiZWw+IHRhcmdldCA9IG5ld0xhYmVsKCk7CiAgICAgc2l6ZV90IGJlZ2luID0gaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOwogICAgIGVtaXRPcGNvZGUob3Bfam5lcV9udWxsKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpAQCAtNDY0NSwyMiArNDYzOCwy
MSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVxdWlyZU9iamVjdENvZXJjaWJsZShS
ZWdpc3RlcklEKiB2YWx1ZSwgY29uc3QgU3RyaQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0WWllbGRQb2ludChSZWdpc3RlcklEKiBhcmd1bWVudCkKIHsKLSAgICBSZWZQdHI8TGFiZWw+
IG1lcmdlUG9pbnQgPSBuZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gbWVyZ2VQb2ludCA9IG5l
d0xhYmVsKCk7CiAgICAgdW5zaWduZWQgeWllbGRQb2ludEluZGV4ID0gbV95aWVsZFBvaW50cysr
OwogICAgIGVtaXRHZW5lcmF0b3JTdGF0ZUNoYW5nZSh5aWVsZFBvaW50SW5kZXggKyAxKTsKIAog
ICAgIC8vIFNwbGl0IHRoZSB0cnkgcmFuZ2UgaGVyZS4KLSAgICBSZWZQdHI8TGFiZWw+IHNhdmVQ
b2ludCA9IGVtaXRMYWJlbChuZXdMYWJlbCgpLmdldCgpKTsKKyAgICBSZWY8TGFiZWw+IHNhdmVQ
b2ludCA9IG5ld0VtaXR0ZWRMYWJlbCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IG1fdHJ5Q29u
dGV4dFN0YWNrLnNpemUoKTsgaS0tOykgewogICAgICAgICBUcnlDb250ZXh0JiBjb250ZXh0ID0g
bV90cnlDb250ZXh0U3RhY2tbaV07Ci0gICAgICAgIFRyeVJhbmdlIHJhbmdlOwotICAgICAgICBy
YW5nZS5zdGFydCA9IGNvbnRleHQuc3RhcnQ7Ci0gICAgICAgIHJhbmdlLmVuZCA9IHNhdmVQb2lu
dDsKLSAgICAgICAgcmFuZ2UudHJ5RGF0YSA9IGNvbnRleHQudHJ5RGF0YTsKLSAgICAgICAgbV90
cnlSYW5nZXMuYXBwZW5kKHJhbmdlKTsKLQorICAgICAgICBtX3RyeVJhbmdlcy5hcHBlbmQoVHJ5
UmFuZ2UgeworICAgICAgICAgICAgY29udGV4dC5zdGFydC5jb3B5UmVmKCksCisgICAgICAgICAg
ICBzYXZlUG9pbnQuY29weVJlZigpLAorICAgICAgICAgICAgY29udGV4dC50cnlEYXRhCisgICAg
ICAgIH0pOwogICAgICAgICAvLyBUcnkgcmFuZ2Ugd2lsbCBiZSByZXN0YXJlZCBhdCB0aGUgbWVy
Z2UgcG9pbnQuCi0gICAgICAgIGNvbnRleHQuc3RhcnQgPSBtZXJnZVBvaW50OworICAgICAgICBj
b250ZXh0LnN0YXJ0ID0gbWVyZ2VQb2ludC5nZXQoKTsKICAgICB9CiAgICAgVmVjdG9yPFRyeUNv
bnRleHQ+IHNhdmVkVHJ5Q29udGV4dFN0YWNrOwogICAgIG1fdHJ5Q29udGV4dFN0YWNrLnN3YXAo
c2F2ZWRUcnlDb250ZXh0U3RhY2spOwpAQCAtNDY3OSwxMiArNDY3MSwxMiBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFlpZWxkKFJlZ2lzdGVySUQqIGFyZ3VtZW50KQogewog
ICAgIGVtaXRZaWVsZFBvaW50KGFyZ3VtZW50KTsKIAotICAgIFJlZlB0cjxMYWJlbD4gbm9ybWFs
TGFiZWwgPSBuZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gbm9ybWFsTGFiZWwgPSBuZXdMYWJl
bCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBjb25kaXRpb24gPSBuZXdUZW1wb3JhcnkoKTsK
ICAgICBlbWl0RXF1YWxpdHlPcChvcF9zdHJpY3RlcSwgY29uZGl0aW9uLmdldCgpLCBnZW5lcmF0
b3JSZXN1bWVNb2RlUmVnaXN0ZXIoKSwgZW1pdExvYWQobnVsbHB0ciwganNOdW1iZXIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3JGdW5jdGlvbjo6R2VuZXJhdG9yUmVzdW1lTW9kZTo6
Tm9ybWFsTW9kZSkpKSk7CiAgICAgZW1pdEp1bXBJZlRydWUoY29uZGl0aW9uLmdldCgpLCBub3Jt
YWxMYWJlbC5nZXQoKSk7CiAKLSAgICBSZWZQdHI8TGFiZWw+IHRocm93TGFiZWwgPSBuZXdMYWJl
bCgpOworICAgIFJlZjxMYWJlbD4gdGhyb3dMYWJlbCA9IG5ld0xhYmVsKCk7CiAgICAgZW1pdEVx
dWFsaXR5T3Aob3Bfc3RyaWN0ZXEsIGNvbmRpdGlvbi5nZXQoKSwgZ2VuZXJhdG9yUmVzdW1lTW9k
ZVJlZ2lzdGVyKCksIGVtaXRMb2FkKG51bGxwdHIsIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMy
X3Q+KEpTR2VuZXJhdG9yRnVuY3Rpb246OkdlbmVyYXRvclJlc3VtZU1vZGU6OlRocm93TW9kZSkp
KSk7CiAgICAgZW1pdEp1bXBJZlRydWUoY29uZGl0aW9uLmdldCgpLCB0aHJvd0xhYmVsLmdldCgp
KTsKICAgICAvLyBSZXR1cm4uCkBAIC00NzE1LDIzICs0NzA3LDIzIEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVsZWdhdGVZaWVsZChSZWdpc3RlcklEKiBhcmd1bWVudCwg
VGhyb3dhYmxlCiAgICAgICAgICAgICBlbWl0Q2FsbChpdGVyYXRvci5nZXQoKSwgaXRlcmF0b3Iu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2
b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPExhYmVsPiBsb29wRG9uZSA9IG5ld0xhYmVsKCk7CisgICAg
ICAgIFJlZjxMYWJlbD4gbG9vcERvbmUgPSBuZXdMYWJlbCgpOwogICAgICAgICB7Ci0gICAgICAg
ICAgICBSZWZQdHI8TGFiZWw+IG5leHRFbGVtZW50ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAg
IFJlZjxMYWJlbD4gbmV4dEVsZW1lbnQgPSBuZXdMYWJlbCgpOwogICAgICAgICAgICAgZW1pdExv
YWQodmFsdWUuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgICAgICAgICBlbWl0SnVtcChu
ZXh0RWxlbWVudC5nZXQoKSk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0
ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFi
ZWwoKTsKICAgICAgICAgICAgIGVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwogICAgICAgICAg
ICAgZW1pdExvb3BIaW50KCk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gYnJhbmNoT25S
ZXN1bHQgPSBuZXdMYWJlbCgpOworICAgICAgICAgICAgUmVmPExhYmVsPiBicmFuY2hPblJlc3Vs
dCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZW1pdFlpZWxk
UG9pbnQodmFsdWUuZ2V0KCkpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBub3Jt
YWxMYWJlbCA9IG5ld0xhYmVsKCk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPExhYmVsPiByZXR1
cm5MYWJlbCA9IG5ld0xhYmVsKCk7CisgICAgICAgICAgICAgICAgUmVmPExhYmVsPiBub3JtYWxM
YWJlbCA9IG5ld0xhYmVsKCk7CisgICAgICAgICAgICAgICAgUmVmPExhYmVsPiByZXR1cm5MYWJl
bCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gY29uZGl0aW9uID0gbmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGVtaXRFcXVhbGl0eU9wKG9wX3N0cmljdGVxLCBjb25kaXRpb24uZ2V0KCksIGdl
bmVyYXRvclJlc3VtZU1vZGVSZWdpc3RlcigpLCBlbWl0TG9hZChudWxscHRyLCBqc051bWJlcihz
dGF0aWNfY2FzdDxpbnQzMl90PihKU0dlbmVyYXRvckZ1bmN0aW9uOjpHZW5lcmF0b3JSZXN1bWVN
b2RlOjpOb3JtYWxNb2RlKSkpKTsKQEAgLTQ3NDUsNyArNDczNyw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RGVsZWdhdGVZaWVsZChSZWdpc3RlcklEKiBhcmd1bWVudCwg
VGhyb3dhYmxlCiAKICAgICAgICAgICAgICAgICAvLyBUaHJvdy4KICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gdGhyb3dNZXRob2RGb3VuZCA9IG5l
d0xhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4gdGhyb3dNZXRob2RGb3Vu
ZCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
aHJvd01ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwg
cHJvcGVydHlOYW1lcygpLnRocm93S2V5d29yZCk7CiAgICAgICAgICAgICAgICAgICAgIGVtaXRK
dW1wSWZGYWxzZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHRocm93TWV0aG9kLmdl
dCgpKSwgdGhyb3dNZXRob2RGb3VuZC5nZXQoKSk7CiAKQEAgLTQ3NjUsMTMgKzQ3NTcsMTMgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXREZWxlZ2F0ZVlpZWxkKFJlZ2lzdGVy
SUQqIGFyZ3VtZW50LCBUaHJvd2FibGUKICAgICAgICAgICAgICAgICAvLyBSZXR1cm4uCiAgICAg
ICAgICAgICAgICAgZW1pdExhYmVsKHJldHVybkxhYmVsLmdldCgpKTsKICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuTWV0aG9kRm91bmQg
PSBuZXdMYWJlbCgpOworICAgICAgICAgICAgICAgICAgICBSZWY8TGFiZWw+IHJldHVybk1ldGhv
ZEZvdW5kID0gbmV3TGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5n
ZXQoKSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOwogICAgICAgICAgICAgICAgICAg
ICBlbWl0SnVtcElmRmFsc2UoZW1pdElzVW5kZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5N
ZXRob2QuZ2V0KCkpLCByZXR1cm5NZXRob2RGb3VuZC5nZXQoKSk7CiAKICAgICAgICAgICAgICAg
ICAgICAgZW1pdE1vdmUodmFsdWUuZ2V0KCksIGdlbmVyYXRvclZhbHVlUmVnaXN0ZXIoKSk7CiAK
LSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPExhYmVsPiByZXR1cm5TZXF1ZW5jZSA9IG5ld0xh
YmVsKCk7CisgICAgICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4gcmV0dXJuU2VxdWVuY2UgPSBu
ZXdMYWJlbCgpOwogICAgICAgICAgICAgICAgICAgICBlbWl0SnVtcChyZXR1cm5TZXF1ZW5jZS5n
ZXQoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgZW1pdExhYmVsKHJldHVybk1ldGhvZEZvdW5k
LmdldCgpKTsKQEAgLTQ3ODAsMTIgKzQ3NzIsMTIgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXREZWxlZ2F0ZVlpZWxkKFJlZ2lzdGVySUQqIGFyZ3VtZW50LCBUaHJvd2FibGUK
ICAgICAgICAgICAgICAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLmFyZ3VtZW50UmVn
aXN0ZXIoMCksIGdlbmVyYXRvclZhbHVlUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCks
IG5vZGUtPmRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpObyk7CiAKLSAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPExhYmVsPiByZXR1cm5JdGVyYXRvclJlc3VsdElzT2JqZWN0ID0gbmV3TGFi
ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmPExhYmVsPiByZXR1cm5JdGVyYXRvclJlc3Vs
dElzT2JqZWN0ID0gbmV3TGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAgZW1pdEp1bXBJZlRy
dWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSksIHJldHVybkl0ZXJh
dG9yUmVzdWx0SXNPYmplY3QuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBlbWl0VGhyb3dU
eXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBh
biBvYmplY3QuIikpOwogCiAgICAgICAgICAgICAgICAgICAgIGVtaXRMYWJlbChyZXR1cm5JdGVy
YXRvclJlc3VsdElzT2JqZWN0LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPExh
YmVsPiByZXR1cm5Gcm9tR2VuZXJhdG9yID0gbmV3TGFiZWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgUmVmPExhYmVsPiByZXR1cm5Gcm9tR2VuZXJhdG9yID0gbmV3TGFiZWwoKTsKICAgICAgICAg
ICAgICAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHZh
bHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuZG9uZSksIHJldHVybkZyb21HZW5lcmF0b3IuZ2V0
KCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRCeUlkKHZhbHVlLmdldCgpLCB2YWx1
ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKQEAgLTQ4MjcsNyArNDgxOSw3IEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZW5lcmF0b3JTdGF0ZUNoYW5nZShpbnQzMl90IHN0
YXRlKQogICAgIGVtaXRQdXRCeUlkKGdlbmVyYXRvclJlZ2lzdGVyKCksIHByb3BlcnR5TmFtZXMo
KS5idWlsdGluTmFtZXMoKS5nZW5lcmF0b3JTdGF0ZVByaXZhdGVOYW1lKCksIGNvbXBsZXRlZFN0
YXRlKTsKIH0KIAotYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBWaWFGaW5hbGx5SWZO
ZWVkZWQoaW50IHRhcmdldExhYmVsU2NvcGVEZXB0aCwgTGFiZWwqIGp1bXBUYXJnZXQpCitib29s
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcFZpYUZpbmFsbHlJZk5lZWRlZChpbnQgdGFyZ2V0
TGFiZWxTY29wZURlcHRoLCBMYWJlbCYganVtcFRhcmdldCkKIHsKICAgICBBU1NFUlQobGFiZWxT
Y29wZURlcHRoKCkgLSB0YXJnZXRMYWJlbFNjb3BlRGVwdGggPj0gMCk7CiAgICAgc2l6ZV90IHNj
b3BlRGVsdGEgPSBsYWJlbFNjb3BlRGVwdGgoKSAtIHRhcmdldExhYmVsU2NvcGVEZXB0aDsKQEAg
LTQ4NTgsNyArNDg1MCw3IEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wVmlhRmlu
YWxseUlmTmVlZGVkKGludCB0YXJnZXRMYWJlbFNjb3BlRGVwdGgsIExhCiAgICAgb3V0ZXJtb3N0
RmluYWxseUNvbnRleHQtPnJlZ2lzdGVySnVtcChqdW1wSUQsIGxleGljYWxTY29wZUluZGV4LCBq
dW1wVGFyZ2V0KTsKIAogICAgIGVtaXRTZXRDb21wbGV0aW9uVHlwZShqdW1wSUQpOwotICAgIGVt
aXRKdW1wKGlubmVybW9zdEZpbmFsbHlDb250ZXh0LT5maW5hbGx5TGFiZWwoKSk7CisgICAgZW1p
dEp1bXAoKmlubmVybW9zdEZpbmFsbHlDb250ZXh0LT5maW5hbGx5TGFiZWwoKSk7CiAgICAgcmV0
dXJuIHRydWU7IC8vIFdlJ2xsIGJlIGp1bXBpbmcgdG8gYSBmaW5hbGx5IGJsb2NrLgogfQogCkBA
IC00ODg1LDExICs0ODc3LDExIEBAIGJvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXR1cm5W
aWFGaW5hbGx5SWZOZWVkZWQoUmVnaXN0ZXJJRCogcmV0dXJuUmVnaXN0ZXIpCiAKICAgICBlbWl0
U2V0Q29tcGxldGlvblR5cGUoQ29tcGxldGlvblR5cGU6OlJldHVybik7CiAgICAgZW1pdFNldENv
bXBsZXRpb25WYWx1ZShyZXR1cm5SZWdpc3Rlcik7Ci0gICAgZW1pdEp1bXAoaW5uZXJtb3N0Rmlu
YWxseUNvbnRleHQtPmZpbmFsbHlMYWJlbCgpKTsKKyAgICBlbWl0SnVtcCgqaW5uZXJtb3N0Rmlu
YWxseUNvbnRleHQtPmZpbmFsbHlMYWJlbCgpKTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gV2UnbGwg
YmUganVtcGluZyB0byBhIGZpbmFsbHkgYmxvY2suCiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRGaW5hbGx5Q29tcGxldGlvbihGaW5hbGx5Q29udGV4dCYgY29udGV4dCwgUmVnaXN0
ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgTGFiZWwqIG5vcm1hbENvbXBsZXRpb25MYWJl
bCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRGaW5hbGx5Q29tcGxldGlvbihGaW5hbGx5
Q29udGV4dCYgY29udGV4dCwgUmVnaXN0ZXJJRCogY29tcGxldGlvblR5cGVSZWdpc3RlciwgTGFi
ZWwmIG5vcm1hbENvbXBsZXRpb25MYWJlbCkKIHsKICAgICBpZiAoY29udGV4dC5udW1iZXJPZkJy
ZWFrc09yQ29udGludWVzKCkgfHwgY29udGV4dC5oYW5kbGVzUmV0dXJucygpKSB7CiAgICAgICAg
IGVtaXRKdW1wSWYob3Bfc3RyaWN0ZXEsIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIENvbXBsZXRp
b25UeXBlOjpOb3JtYWwsIG5vcm1hbENvbXBsZXRpb25MYWJlbCk7CkBAIC00OTAwLDcgKzQ4OTIs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RmluYWxseUNvbXBsZXRpb24oRmluYWxs
eUNvbnRleHQmIGNvbnRleHQsIFJlZ2lzdGVySQogICAgICAgICBBU1NFUlQob3V0ZXJDb250ZXh0
IHx8IG51bWJlck9mSnVtcHMgPT0gY29udGV4dC5udW1iZXJPZkJyZWFrc09yQ29udGludWVzKCkp
OwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZKdW1wczsgaSsrKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8TGFiZWw+IG5leHRMYWJlbCA9IG5ld0xhYmVsKCk7CisgICAg
ICAgICAgICBSZWY8TGFiZWw+IG5leHRMYWJlbCA9IG5ld0xhYmVsKCk7CiAgICAgICAgICAgICBh
dXRvJiBqdW1wID0gY29udGV4dC5qdW1wcyhpKTsKICAgICAgICAgICAgIGVtaXRKdW1wSWYob3Bf
bnN0cmljdGVxLCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBqdW1wLmp1bXBJRCwgbmV4dExhYmVs
LmdldCgpKTsKIApAQCAtNDkxNSwxMiArNDkwNywxMiBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RmluYWxseUNvbXBsZXRpb24oRmluYWxseUNvbnRleHQmIGNvbnRleHQsIFJlZ2lzdGVy
SQogICAgICAgICAgICAgLy8gV2UgYXJlIG5vdCB0aGUgb3V0ZXJtb3N0IGZpbmFsbHkuCiAgICAg
ICAgICAgICBib29sIGhhc0JyZWFrc09yQ29udGludWVzTm90Q292ZXJlZEJ5SnVtcHMgPSBjb250
ZXh0Lm51bWJlck9mQnJlYWtzT3JDb250aW51ZXMoKSA+IG51bWJlck9mSnVtcHM7CiAgICAgICAg
ICAgICBpZiAoaGFzQnJlYWtzT3JDb250aW51ZXNOb3RDb3ZlcmVkQnlKdW1wcyB8fCBjb250ZXh0
LmhhbmRsZXNSZXR1cm5zKCkpCi0gICAgICAgICAgICAgICAgZW1pdEp1bXBJZihvcF9uc3RyaWN0
ZXEsIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIENvbXBsZXRpb25UeXBlOjpUaHJvdywgb3V0ZXJD
b250ZXh0LT5maW5hbGx5TGFiZWwoKSk7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBJZihvcF9u
c3RyaWN0ZXEsIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIENvbXBsZXRpb25UeXBlOjpUaHJvdywg
Km91dGVyQ29udGV4dC0+ZmluYWxseUxhYmVsKCkpOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBXZSBhcmUgdGhlIG91dGVybW9zdCBmaW5hbGx5LgogICAgICAgICAgICAgaWYg
KGNvbnRleHQuaGFuZGxlc1JldHVybnMoKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJl
bD4gbm90UmV0dXJuTGFiZWwgPSBuZXdMYWJlbCgpOworICAgICAgICAgICAgICAgIFJlZjxMYWJl
bD4gbm90UmV0dXJuTGFiZWwgPSBuZXdMYWJlbCgpOwogICAgICAgICAgICAgICAgIGVtaXRKdW1w
SWYob3BfbnN0cmljdGVxLCBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBDb21wbGV0aW9uVHlwZTo6
UmV0dXJuLCBub3RSZXR1cm5MYWJlbC5nZXQoKSk7CiAKICAgICAgICAgICAgICAgICBlbWl0V2ls
bExlYXZlQ2FsbEZyYW1lRGVidWdIb29rKCk7CkBAIC00OTU1LDcgKzQ5NDcsNyBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjpyZWxlYXNlQ29tcGxldGlvblJlY29yZFJlZ2lzdGVycygpCiAgICAg
bV9jb21wbGV0aW9uVmFsdWVSZWdpc3RlciA9IG51bGxwdHI7CiB9CiAKLXZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRKdW1wSWYoT3Bjb2RlSUQgY29tcGFyZU9wY29kZSwgUmVnaXN0ZXJJRCog
Y29tcGxldGlvblR5cGVSZWdpc3RlciwgQ29tcGxldGlvblR5cGUgdHlwZSwgTGFiZWwqIGp1bXBU
YXJnZXQpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmKE9wY29kZUlEIGNvbXBh
cmVPcGNvZGUsIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIsIENvbXBsZXRpb25U
eXBlIHR5cGUsIExhYmVsJiBqdW1wVGFyZ2V0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0
ZW1wUmVnaXN0ZXIgPSBuZXdUZW1wb3JhcnkoKTsKICAgICBSZWdpc3RlcklEKiB2YWx1ZUNvbnN0
YW50ID0gYWRkQ29uc3RhbnRWYWx1ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQ+KHR5cGUpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKaW5kZXggYzM4MjlmMjk5YzE3OTY0MjViNzMzYzE0YTdkNWYzOWNmMWMzN2My
Ny4uMGZiZWUwYTk3NWJkMGM1YzM5NzRkMDYxNGFhNmNiYjlhODYzMDU3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aApAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBA
IC0xMDgsNyArMTA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogCiAgICAgc3RydWN0IEZp
bmFsbHlKdW1wIHsKLSAgICAgICAgRmluYWxseUp1bXAoQ29tcGxldGlvblR5cGUganVtcElELCBp
bnQgdGFyZ2V0TGV4aWNhbFNjb3BlSW5kZXgsIExhYmVsKiB0YXJnZXRMYWJlbCkKKyAgICAgICAg
RmluYWxseUp1bXAoQ29tcGxldGlvblR5cGUganVtcElELCBpbnQgdGFyZ2V0TGV4aWNhbFNjb3Bl
SW5kZXgsIExhYmVsJiB0YXJnZXRMYWJlbCkKICAgICAgICAgICAgIDoganVtcElEKGp1bXBJRCkK
ICAgICAgICAgICAgICwgdGFyZ2V0TGV4aWNhbFNjb3BlSW5kZXgodGFyZ2V0TGV4aWNhbFNjb3Bl
SW5kZXgpCiAgICAgICAgICAgICAsIHRhcmdldExhYmVsKHRhcmdldExhYmVsKQpAQCAtMTE2LDE0
ICsxMTUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQ29tcGxldGlvblR5cGUganVt
cElEOwogICAgICAgICBpbnQgdGFyZ2V0TGV4aWNhbFNjb3BlSW5kZXg7Ci0gICAgICAgIFJlZlB0
cjxMYWJlbD4gdGFyZ2V0TGFiZWw7CisgICAgICAgIFJlZjxMYWJlbD4gdGFyZ2V0TGFiZWw7CiAg
ICAgfTsKIAogICAgIHN0cnVjdCBGaW5hbGx5Q29udGV4dCB7CiAgICAgICAgIEZpbmFsbHlDb250
ZXh0KCkgeyB9Ci0gICAgICAgIEZpbmFsbHlDb250ZXh0KEZpbmFsbHlDb250ZXh0KiBvdXRlckNv
bnRleHQsIExhYmVsKiBmaW5hbGx5TGFiZWwpCisgICAgICAgIEZpbmFsbHlDb250ZXh0KEZpbmFs
bHlDb250ZXh0KiBvdXRlckNvbnRleHQsIExhYmVsJiBmaW5hbGx5TGFiZWwpCiAgICAgICAgICAg
ICA6IG1fb3V0ZXJDb250ZXh0KG91dGVyQ29udGV4dCkKLSAgICAgICAgICAgICwgbV9maW5hbGx5
TGFiZWwoZmluYWxseUxhYmVsKQorICAgICAgICAgICAgLCBtX2ZpbmFsbHlMYWJlbCgmZmluYWxs
eUxhYmVsKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQobV9qdW1wcy5pc0VtcHR5KCkp
OwogICAgICAgICB9CkBAIC0xMzcsNyArMTM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IGJvb2wgaGFuZGxlc1JldHVybnMoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZXNSZXR1cm5zOyB9
CiAgICAgICAgIHZvaWQgc2V0SGFuZGxlc1JldHVybnMoKSB7IG1faGFuZGxlc1JldHVybnMgPSB0
cnVlOyB9CiAKLSAgICAgICAgdm9pZCByZWdpc3Rlckp1bXAoQ29tcGxldGlvblR5cGUganVtcElE
LCBpbnQgbGV4aWNhbFNjb3BlSW5kZXgsIExhYmVsKiB0YXJnZXRMYWJlbCkKKyAgICAgICAgdm9p
ZCByZWdpc3Rlckp1bXAoQ29tcGxldGlvblR5cGUganVtcElELCBpbnQgbGV4aWNhbFNjb3BlSW5k
ZXgsIExhYmVsJiB0YXJnZXRMYWJlbCkKICAgICAgICAgewogICAgICAgICAgICAgbV9qdW1wcy5h
cHBlbmQoRmluYWxseUp1bXAoanVtcElELCBsZXhpY2FsU2NvcGVJbmRleCwgdGFyZ2V0TGFiZWwp
KTsKICAgICAgICAgfQpAQCAtMjQ4LDEyICsyNDcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
fTsKIAogICAgIHN0cnVjdCBUcnlEYXRhIHsKLSAgICAgICAgUmVmUHRyPExhYmVsPiB0YXJnZXQ7
CisgICAgICAgIFJlZjxMYWJlbD4gdGFyZ2V0OwogICAgICAgICBIYW5kbGVyVHlwZSBoYW5kbGVy
VHlwZTsKICAgICB9OwogCiAgICAgc3RydWN0IFRyeUNvbnRleHQgewotICAgICAgICBSZWZQdHI8
TGFiZWw+IHN0YXJ0OworICAgICAgICBSZWY8TGFiZWw+IHN0YXJ0OwogICAgICAgICBUcnlEYXRh
KiB0cnlEYXRhOwogICAgIH07CiAKQEAgLTMyMiw4ICszMjEsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICB9OwogCiAgICAgc3RydWN0IFRyeVJhbmdlIHsKLSAgICAgICAgUmVmUHRyPExhYmVsPiBz
dGFydDsKLSAgICAgICAgUmVmUHRyPExhYmVsPiBlbmQ7CisgICAgICAgIFJlZjxMYWJlbD4gc3Rh
cnQ7CisgICAgICAgIFJlZjxMYWJlbD4gZW5kOwogICAgICAgICBUcnlEYXRhKiB0cnlEYXRhOwog
ICAgIH07CiAKQEAgLTQ0Niw3ICs0NDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIExhYmVsU2NvcGVQdHIgbmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpUeXBlLCBj
b25zdCBJZGVudGlmaWVyKiA9IDApOwotICAgICAgICBQYXNzUmVmUHRyPExhYmVsPiBuZXdMYWJl
bCgpOworICAgICAgICBSZWY8TGFiZWw+IG5ld0xhYmVsKCk7CisgICAgICAgIFJlZjxMYWJlbD4g
bmV3RW1pdHRlZExhYmVsKCk7CiAKICAgICAgICAgdm9pZCBlbWl0Tm9kZShSZWdpc3RlcklEKiBk
c3QsIFN0YXRlbWVudE5vZGUqIG4pCiAgICAgICAgIHsKQEAgLTUwNCw3ICs1MDQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbWl0Tm9kZUluVGFpbFBvc2l0aW9uKG51
bGxwdHIsIG4pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbWl0Tm9kZUluQ29uZGl0aW9u
Q29udGV4dChFeHByZXNzaW9uTm9kZSogbiwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxz
ZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9kZSkKKyAgICAgICAgdm9pZCBl
bWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChFeHByZXNzaW9uTm9kZSogbiwgTGFiZWwmIHRydWVU
YXJnZXQsIExhYmVsJiBmYWxzZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX3ZtLT5pc1NhZmVUb1Jl
Y3Vyc2UoKSkpIHsKICAgICAgICAgICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4
Y2VwdGlvbigpOwpAQCAtNTUxLDEwICs1NTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gKG1fY29kZVR5cGUgIT0gRnVuY3Rpb25Db2RlIHx8IHJpZ2h0SGFzQXNzaWdu
bWVudHMpICYmICFyaWdodElzUHVyZTsKICAgICAgICAgfQogCi0gICAgICAgIEFMV0FZU19JTkxJ
TkUgUGFzc1JlZlB0cjxSZWdpc3RlcklEPiBlbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShFeHByZXNz
aW9uTm9kZSogbiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBib29sIHJpZ2h0SXNQdXJlKQor
ICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cjxSZWdpc3RlcklEPiBlbWl0Tm9kZUZvckxlZnRI
YW5kU2lkZShFeHByZXNzaW9uTm9kZSogbiwgYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRzLCBib29s
IHJpZ2h0SXNQdXJlKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobGVmdEhhbmRTaWRlTmVl
ZHNDb3B5KHJpZ2h0SGFzQXNzaWdubWVudHMsIHJpZ2h0SXNQdXJlKSkgewotICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8UmVnaXN0ZXJJRD4gZHN0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdCA9IG5ld1RlbXBvcmFyeSgpOwogICAgICAg
ICAgICAgICAgIGVtaXROb2RlKGRzdC5nZXQoKSwgbik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGRzdDsKICAgICAgICAgICAgIH0KQEAgLTY5NSwxMyArNjk1LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0VG9TY29wZShSZWdpc3RlcklEKiBzY29wZSwg
Y29uc3QgVmFyaWFibGUmLCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVzb2x2ZU1vZGUsIEluaXRpYWxp
emF0aW9uTW9kZSk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGluaXRpYWxpemVWYXJpYWJsZShjb25z
dCBWYXJpYWJsZSYsIFJlZ2lzdGVySUQqIHZhbHVlKTsKIAotICAgICAgICBQYXNzUmVmUHRyPExh
YmVsPiBlbWl0TGFiZWwoTGFiZWwqKTsKKyAgICAgICAgdm9pZCBlbWl0TGFiZWwoTGFiZWwmKTsK
ICAgICAgICAgdm9pZCBlbWl0TG9vcEhpbnQoKTsKLSAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4g
ZW1pdEp1bXAoTGFiZWwqIHRhcmdldCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRK
dW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXJnZXQpOwotICAgICAgICBQYXNz
UmVmUHRyPExhYmVsPiBlbWl0SnVtcElmRmFsc2UoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRh
cmdldCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNh
bGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8
TGFiZWw+IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJlZ2lzdGVySUQqIGNvbmQsIExhYmVs
KiB0YXJnZXQpOworICAgICAgICB2b2lkIGVtaXRKdW1wKExhYmVsJiB0YXJnZXQpOworICAgICAg
ICB2b2lkIGVtaXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpOwor
ICAgICAgICB2b2lkIGVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFy
Z2V0KTsKKyAgICAgICAgdm9pZCBlbWl0SnVtcElmTm90RnVuY3Rpb25DYWxsKFJlZ2lzdGVySUQq
IGNvbmQsIExhYmVsJiB0YXJnZXQpOworICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlv
bkFwcGx5KFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpOwogCiAgICAgICAgIHZvaWQg
ZW1pdEVudGVyKCk7CiAgICAgICAgIHZvaWQgZW1pdFdhdGNoZG9nKCk7CkBAIC03MzksOSArNzM5
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZW1pdFJlYWRPbmx5RXhjZXB0aW9u
SWZOZWVkZWQoY29uc3QgVmFyaWFibGUmKTsKIAogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9j
ay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgotICAgICAgICBUcnlEYXRhKiBwdXNo
VHJ5KExhYmVsKiBzdGFydCwgTGFiZWwqIGhhbmRsZXJMYWJlbCwgSGFuZGxlclR5cGUpOworICAg
ICAgICBUcnlEYXRhKiBwdXNoVHJ5KExhYmVsJiBzdGFydCwgTGFiZWwmIGhhbmRsZXJMYWJlbCwg
SGFuZGxlclR5cGUpOwogICAgICAgICAvLyBFbmQgYSB0cnkgYmxvY2suICdlbmQnIG11c3QgaGF2
ZSBiZWVuIGVtaXR0ZWQuCi0gICAgICAgIHZvaWQgcG9wVHJ5KFRyeURhdGEqLCBMYWJlbCogZW5k
KTsKKyAgICAgICAgdm9pZCBwb3BUcnkoVHJ5RGF0YSosIExhYmVsJiBlbmQpOwogICAgICAgICB2
b2lkIGVtaXRDYXRjaChSZWdpc3RlcklEKiBleGNlcHRpb25SZWdpc3RlciwgUmVnaXN0ZXJJRCog
dGhyb3duVmFsdWVSZWdpc3Rlcik7CiAKICAgICBwcml2YXRlOgpAQCAtODM0LDE4ICs4MzQsMTgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBlbWl0TW92ZShjb21wbGV0aW9uVmFsdWVS
ZWdpc3RlcigpLCByZWcpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbWl0SnVtcElmKE9w
Y29kZUlEIGNvbXBhcmVPcGNvZGUsIFJlZ2lzdGVySUQqIGNvbXBsZXRpb25UeXBlUmVnaXN0ZXIs
IENvbXBsZXRpb25UeXBlLCBMYWJlbCoganVtcFRhcmdldCk7CisgICAgICAgIHZvaWQgZW1pdEp1
bXBJZihPcGNvZGVJRCBjb21wYXJlT3Bjb2RlLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJl
Z2lzdGVyLCBDb21wbGV0aW9uVHlwZSwgTGFiZWwmIGp1bXBUYXJnZXQpOwogCi0gICAgICAgIGJv
b2wgZW1pdEp1bXBWaWFGaW5hbGx5SWZOZWVkZWQoaW50IHRhcmdldExhYmVsU2NvcGVEZXB0aCwg
TGFiZWwqIGp1bXBUYXJnZXQpOworICAgICAgICBib29sIGVtaXRKdW1wVmlhRmluYWxseUlmTmVl
ZGVkKGludCB0YXJnZXRMYWJlbFNjb3BlRGVwdGgsIExhYmVsJiBqdW1wVGFyZ2V0KTsKICAgICAg
ICAgYm9vbCBlbWl0UmV0dXJuVmlhRmluYWxseUlmTmVlZGVkKFJlZ2lzdGVySUQqIHJldHVyblJl
Z2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0RmluYWxseUNvbXBsZXRpb24oRmluYWxseUNvbnRl
eHQmLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBMYWJlbCogbm9ybWFsQ29t
cGxldGlvbkxhYmVsKTsKKyAgICAgICAgdm9pZCBlbWl0RmluYWxseUNvbXBsZXRpb24oRmluYWxs
eUNvbnRleHQmLCBSZWdpc3RlcklEKiBjb21wbGV0aW9uVHlwZVJlZ2lzdGVyLCBMYWJlbCYgbm9y
bWFsQ29tcGxldGlvbkxhYmVsKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgYWxsb2Nh
dGVDb21wbGV0aW9uUmVjb3JkUmVnaXN0ZXJzKCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZUNvbXBs
ZXRpb25SZWNvcmRSZWdpc3RlcnMoKTsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgRmluYWxseUNv
bnRleHQqIHB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZShMYWJlbCogZmluYWxseUxhYmVsKTsK
KyAgICAgICAgRmluYWxseUNvbnRleHQqIHB1c2hGaW5hbGx5Q29udHJvbEZsb3dTY29wZShMYWJl
bCYgZmluYWxseUxhYmVsKTsKICAgICAgICAgRmluYWxseUNvbnRleHQgcG9wRmluYWxseUNvbnRy
b2xGbG93U2NvcGUoKTsKIAogICAgICAgICB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpOwpAQCAtODU4LDcgKzg1OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBMYWJlbFNjb3BlUHRyIGNvbnRpbnVlVGFyZ2V0KGNvbnN0
IElkZW50aWZpZXImKTsKIAogICAgICAgICB2b2lkIGJlZ2luU3dpdGNoKFJlZ2lzdGVySUQqLCBT
d2l0Y2hJbmZvOjpTd2l0Y2hUeXBlKTsKLSAgICAgICAgdm9pZCBlbmRTd2l0Y2godWludDMyX3Qg
Y2xhdXNlQ291bnQsIFJlZlB0cjxMYWJlbD4qLCBFeHByZXNzaW9uTm9kZSoqLCBMYWJlbCogZGVm
YXVsdExhYmVsLCBpbnQzMl90IG1pbiwgaW50MzJfdCByYW5nZSk7CisgICAgICAgIHZvaWQgZW5k
U3dpdGNoKHVpbnQzMl90IGNsYXVzZUNvdW50LCBjb25zdCBWZWN0b3I8UmVmPExhYmVsPiwgOD4m
LCBFeHByZXNzaW9uTm9kZSoqLCBMYWJlbCYgZGVmYXVsdExhYmVsLCBpbnQzMl90IG1pbiwgaW50
MzJfdCByYW5nZSk7CiAKICAgICAgICAgdm9pZCBlbWl0WWllbGRQb2ludChSZWdpc3RlcklEKik7
CiAKQEAgLTk0OCw3ICs5NDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gSGVscGVy
IGZvciBlbWl0Q2FsbCgpIGFuZCBlbWl0Q29uc3RydWN0KCkuIFRoaXMgd29ya3MgYmVjYXVzZSB0
aGUgc2V0IG9mCiAgICAgICAgIC8vIGV4cGVjdGVkIGZ1bmN0aW9ucyBoYXZlIGlkZW50aWNhbCBi
ZWhhdmlvciBmb3IgYm90aCBjYWxsIGFuZCBjb25zdHJ1Y3QKICAgICAgICAgLy8gKGkuZS4gIk9i
amVjdCgpIiBpcyBpZGVudGljYWwgdG8gIm5ldyBPYmplY3QoKSIpLgotICAgICAgICBFeHBlY3Rl
ZEZ1bmN0aW9uIGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGZ1bmMsIEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCBMYWJlbCog
ZG9uZSk7CisgICAgICAgIEV4cGVjdGVkRnVuY3Rpb24gZW1pdEV4cGVjdGVkRnVuY3Rpb25Tbmlw
cGV0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZnVuYywgRXhwZWN0ZWRGdW5jdGlvbiwg
Q2FsbEFyZ3VtZW50cyYsIExhYmVsJiBkb25lKTsKICAgICAgICAgCiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRDYWxsKE9wY29kZUlELCBSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGZ1bmMs
IEV4cGVjdGVkRnVuY3Rpb24sIENhbGxBcmd1bWVudHMmLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQsIERlYnVnZ2FibGVDYWxsKTsKIApAQCAtMTEwMCw3ICsxMTAwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjU5ODAKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPENvbnRyb2xGbG93U2Nv
cGUsIDE2PiBtX2NvbnRyb2xGbG93U2NvcGVTdGFjazsKICAgICAgICAgVmVjdG9yPFN3aXRjaElu
Zm8+IG1fc3dpdGNoQ29udGV4dFN0YWNrOwotICAgICAgICBWZWN0b3I8UmVmUHRyPEZvckluQ29u
dGV4dD4+IG1fZm9ySW5Db250ZXh0U3RhY2s7CisgICAgICAgIFZlY3RvcjxSZWY8Rm9ySW5Db250
ZXh0Pj4gbV9mb3JJbkNvbnRleHRTdGFjazsKICAgICAgICAgVmVjdG9yPFRyeUNvbnRleHQ+IG1f
dHJ5Q29udGV4dFN0YWNrOwogICAgICAgICB1bnNpZ25lZCBtX3lpZWxkUG9pbnRzIHsgMCB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsLmgKaW5kZXggODIxOTU4
ODQ1YWU2ZjdhY2JiYTRjOGU5MjI0Mjg1YjcxNzhkM2E0Yi4uZWFiZmI0OTNkZjFlN2UwZTFhNzg4
Y2FhNDU3YTFjZjM2NTAwODk2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9MYWJlbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTGFiZWwuaApAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBC
eXRlY29kZUdlbmVyYXRvcjsKIAogICAgIGNsYXNzIExhYmVsIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShMYWJlbCk7CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBMYWJlbChCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQogICAgICAgICAgICAgOiBtX3JlZkNvdW50KDApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0xhYmVsU2NvcGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWxTY29wZS5oCmluZGV4
IDAyYzRhMjQ5OThhYzkzYWFlZGRhNGFmZTE2NzQ1OTAwOTQ4NmM4M2UuLjRkNzYxMzNmMTNkMTBj
MzNiZWQxYTQxYjMxMzIzNmUyNmRmMDUwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvTGFiZWxTY29wZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTGFiZWxTY29wZS5oCkBAIC0yOCw3ICsyOCw2IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlICJMYWJlbC5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM5LDE4ICszOCwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIGVudW0gVHlwZSB7IExvb3AsIFN3aXRjaCwgTmFtZWRMYWJlbCB9
OwogCi0gICAgICAgIExhYmVsU2NvcGUoVHlwZSB0eXBlLCBjb25zdCBJZGVudGlmaWVyKiBuYW1l
LCBpbnQgc2NvcGVEZXB0aCwgUGFzc1JlZlB0cjxMYWJlbD4gYnJlYWtUYXJnZXQsIFBhc3NSZWZQ
dHI8TGFiZWw+IGNvbnRpbnVlVGFyZ2V0KQorICAgICAgICBMYWJlbFNjb3BlKFR5cGUgdHlwZSwg
Y29uc3QgSWRlbnRpZmllciogbmFtZSwgaW50IHNjb3BlRGVwdGgsIFJlZjxMYWJlbD4mJiBicmVh
a1RhcmdldCwgUmVmUHRyPExhYmVsPiYmIGNvbnRpbnVlVGFyZ2V0KQogICAgICAgICAgICAgOiBt
X3JlZkNvdW50KDApCiAgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAgICAgLCBt
X25hbWUobmFtZSkKICAgICAgICAgICAgICwgbV9zY29wZURlcHRoKHNjb3BlRGVwdGgpCi0gICAg
ICAgICAgICAsIG1fYnJlYWtUYXJnZXQoYnJlYWtUYXJnZXQpCi0gICAgICAgICAgICAsIG1fY29u
dGludWVUYXJnZXQoY29udGludWVUYXJnZXQpCisgICAgICAgICAgICAsIG1fYnJlYWtUYXJnZXQo
V1RGTW92ZShicmVha1RhcmdldCkpCisgICAgICAgICAgICAsIG1fY29udGludWVUYXJnZXQoV1RG
TW92ZShjb250aW51ZVRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICBpbnQg
cmVmQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3JlZkNvdW50OyB9CiAKLSAgICAgICAgTGFiZWwq
IGJyZWFrVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9icmVha1RhcmdldC5nZXQoKTsgfQorICAg
ICAgICBMYWJlbCYgYnJlYWtUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2JyZWFrVGFyZ2V0Lmdl
dCgpOyB9CiAgICAgICAgIExhYmVsKiBjb250aW51ZVRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGludWVUYXJnZXQuZ2V0KCk7IH0KIAogICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KQEAgLTcxLDcgKzcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFR5cGUgbV90eXBlOwogICAgICAgICBjb25zdCBJZGVudGlmaWVyKiBtX25hbWU7CiAgICAgICAg
IGludCBtX3Njb3BlRGVwdGg7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gbV9icmVha1RhcmdldDsK
KyAgICAgICAgUmVmPExhYmVsPiBtX2JyZWFrVGFyZ2V0OwogICAgICAgICBSZWZQdHI8TGFiZWw+
IG1fY29udGludWVUYXJnZXQ7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IGViZWNjMGRlMTE3ZmQzOWYw
NjQxNGI1NzExNzYwNWUwNDQ2ZmU2MjUuLmY4ZjA4YjhlMDQ0YTRjZTFlZmY1ZjA2NjA3ZDg2ZmFm
ZDE0ZWFkMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
YmVjYXVzZSB0aGUgYXNzaWdubWVudCBub2RlLCAieCA9IiwgcGFzc2VzIHJbeF0gYXMgZHN0IHRv
IHRoZSBudW1iZXIgbm9kZSwgIjEiLgogKi8KIAotdm9pZCBFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5
dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIExh
YmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIEZhbGxUaHJvdWdoTW9kZSBmYWxs
VGhyb3VnaE1vZGUpCit2b2lkIEV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0ZWNvZGVJbkNvbmRpdGlv
bkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgTGFiZWwmIHRydWVUYXJnZXQs
IExhYmVsJiBmYWxzZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9kZSkKIHsK
ICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUodGhpcyk7CiAgICAg
aWYgKGZhbGxUaHJvdWdoTW9kZSA9PSBGYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKQEAgLTkxLDcgKzkx
LDcgQEAgUmVnaXN0ZXJJRCogVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGE6OmVtaXRUaHJvd1JlZmVy
ZW5jZUVycm9yKEJ5dGVjb2RlR2VuZXJhdG9yJgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gQ29uc3RhbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotdm9pZCBDb25zdGFudE5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFiZWwqIGZhbHNl
VGFyZ2V0LCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlKQordm9pZCBDb25zdGFudE5v
ZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBMYWJlbCYgdHJ1ZVRhcmdldCwgTGFiZWwmIGZhbHNlVGFyZ2V0LCBGYWxsVGhyb3Vn
aE1vZGUgZmFsbFRocm91Z2hNb2RlKQogewogICAgIFRyaVN0YXRlIHZhbHVlID0ganNWYWx1ZShn
ZW5lcmF0b3IpLnB1cmVUb0Jvb2xlYW4oKTsKIApAQCAtODI1LDcgKzgyNSw3IEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlCiAgICAgICAgIGlmIChnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0
b3JDb250ZXh0KCkgfHwgKGRvV2VVc2VBcnJvd0Z1bmN0aW9uSW5Db25zdHJ1Y3RvciAmJiBnZW5l
cmF0b3IuaXNTdXBlckNhbGxVc2VkSW5Jbm5lckFycm93RnVuY3Rpb24oKSkpCiAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFycm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1l
bnQoKTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxMYWJlbD4gdGhpc0lzRW1wdHlMYWJlbCA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWY8TGFiZWw+IHRoaXNJc0VtcHR5TGFi
ZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZU
cnVlKGdlbmVyYXRvci5lbWl0SXNFbXB0eShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGdlbmVy
YXRvci50aGlzUmVnaXN0ZXIoKSksIHRoaXNJc0VtcHR5TGFiZWwuZ2V0KCkpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoQVNDSUlMaXRlcmFsKCInc3VwZXIoKScg
Y2FuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGluIGEgY29uc3RydWN0b3IuIikpOwogICAg
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRoaXNJc0VtcHR5TGFiZWwuZ2V0KCkpOwpAQCAtMTE4
NCw4ICsxMTg0LDggQEAgUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVj
b2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2kKIAogUmVnaXN0ZXJJRCogQ2Fs
bEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRyPExhYmVsPiByZWFsQ2FsbCA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgIFJlZlB0cjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CisgICAgUmVmPExhYmVsPiByZWFsQ2FsbCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHBy
ZXNzaW9uU3RhcnQoKSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gZnVuY3Rpb247CkBAIC0xMjUxLDggKzEyNTEsOCBAQCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LAogICAgIC8vIGZ1bmN0aW9uLmFwcGx5KHRoaXNBcmcsIFthcmcwLCBhcmcxLCAuLi5dKSAtPiBj
YW4gYmUgdHJpdmlhbGx5IGNvZXJjZWQgaW50byBmdW5jdGlvbi5jYWxsKHRoaXNBcmcsIGFyZzAs
IGFyZzEsIC4uLikgYW5kIHNhdmVzIG9iamVjdCBhbGxvY2F0aW9uCiAgICAgYm9vbCBtYXlCZUNh
bGwgPSBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMobV9hcmdzKTsKIAotICAgIFJlZlB0cjxMYWJl
bD4gcmVhbENhbGwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICBSZWZQdHI8TGFiZWw+IGVu
ZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gcmVhbENhbGwgPSBnZW5l
cmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
YmFzZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2
b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uOwpAQCAtMTI3OCw4ICsxMjc4LDggQEAgUmVnaXN0ZXJJ
RCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhdXRvIGV4
dHJhY3RvciA9IFsmdGhpc1JlZ2lzdGVyLCAmYXJndW1lbnRzUmVnaXN0ZXIsICZpbmRleF0oQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogdmFsdWUpCiAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8TGFiZWw+IGhhdmVUaGlzID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gZW5k
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgICAgICAgICAgICAgIFJlZjxMYWJlbD4g
aGF2ZVRoaXMgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgUmVm
PExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGNvbXBhcmVSZXN1bHQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleFplcm9Db21w
YXJlUmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcChvcF9lcSwgY29tcGFyZVJlc3VsdC5n
ZXQoKSwgaW5kZXguZ2V0KCksIGdlbmVyYXRvci5lbWl0TG9hZCgwLCBqc051bWJlcigwKSksIE9w
ZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjpudW1iZXJUeXBlSXNJbnQzMigpLCBSZXN1bHRUeXBlOjpu
dW1iZXJUeXBlSXNJbnQzMigpKSk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
SnVtcElmRmFsc2UoaW5kZXhaZXJvQ29tcGFyZVJlc3VsdC5nZXQoKSwgaGF2ZVRoaXMuZ2V0KCkp
OwpAQCAtMTcyMSw3ICsxNzIxLDcgQEAgUmVnaXN0ZXJJRCogQml0d2lzZU5vdE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlckkKICAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2dpY2FsTm90Tm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIExvZ2ljYWxOb3ROb2RlOjplbWl0Qnl0ZWNv
ZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgTGFiZWwq
IHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJv
dWdoTW9kZSkKK3ZvaWQgTG9naWNhbE5vdE5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29u
dGV4dChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBMYWJlbCYgdHJ1ZVRhcmdldCwgTGFi
ZWwmIGZhbHNlVGFyZ2V0LCBGYWxsVGhyb3VnaE1vZGUgZmFsbFRocm91Z2hNb2RlKQogewogICAg
IGlmIChVTkxJS0VMWShuZWVkc0RlYnVnSG9vaygpKSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2sodGhpcyk7CkBAIC0xODUwLDcgKzE4NTAsNyBAQCBSZWdpc3RlcklEKiBCaW5hcnlP
cE5vZGU6OmVtaXRTdHJjYXQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZAogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFN0cmNhdChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIHRlbXBvcmFyeVJlZ2lzdGVyc1swXS5nZXQoKSksIHRlbXBvcmFyeVJlZ2lz
dGVyc1swXS5nZXQoKSwgdGVtcG9yYXJ5UmVnaXN0ZXJzLnNpemUoKSk7CiB9CiAKLXZvaWQgQmlu
YXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgRmFs
bFRocm91Z2hNb2RlIGZhbGxUaHJvdWdoTW9kZSkKK3ZvaWQgQmluYXJ5T3BOb2RlOjplbWl0Qnl0
ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgTGFi
ZWwmIHRydWVUYXJnZXQsIExhYmVsJiBmYWxzZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlIGZhbGxU
aHJvdWdoTW9kZSkKIHsKICAgICBUcmlTdGF0ZSBicmFuY2hDb25kaXRpb247CiAgICAgRXhwcmVz
c2lvbk5vZGUqIGJyYW5jaEV4cHJlc3Npb247CkBAIC0yMDA0LDkgKzIwMDQsOSBAQCBSZWdpc3Rl
cklEKiBJbnN0YW5jZU9mTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2V4cHIxLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMs
IG1fZXhwcjItPmlzUHVyZShnZW5lcmF0b3IpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29u
c3RydWN0b3IgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMik7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGRzdFJlZyA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgdmFsdWUuZ2V0
KCkpOwotICAgIFJlZlB0cjxMYWJlbD4gY3VzdG9tID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0g
ICAgUmVmUHRyPExhYmVsPiBkb25lID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgUmVmUHRy
PExhYmVsPiB0eXBlRXJyb3IgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+
IGN1c3RvbSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gZG9uZSA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gdHlwZUVycm9yID0gZ2VuZXJhdG9y
Lm5ld0xhYmVsKCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRJc09iamVjdChp
c09iamVjdC5nZXQoKSwgY29uc3RydWN0b3IuZ2V0KCkpOwpAQCAtMjA1OCw3ICsyMDU4LDcgQEAg
UmVnaXN0ZXJJRCogSW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogUmVnaXN0ZXJJRCogTG9naWNhbE9wTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KTsKLSAgICBSZWZQdHI8TGFiZWw+IHRhcmdldCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
ICAgIFJlZjxMYWJlbD4gdGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgCiAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlKHRlbXAuZ2V0KCksIG1fZXhwcjEpOwogICAgIGlmIChtX29wZXJh
dG9yID09IE9wTG9naWNhbEFuZCkKQEAgLTIwNzEsMTIgKzIwNzEsMTIgQEAgUmVnaXN0ZXJJRCog
TG9naWNhbE9wTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVk
ZWQoZHN0LCB0ZW1wLmdldCgpKTsKIH0KIAotdm9pZCBMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNv
ZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgTGFiZWwq
IHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlIGZhbGxUaHJv
dWdoTW9kZSkKK3ZvaWQgTG9naWNhbE9wTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250
ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIExhYmVsJiB0cnVlVGFyZ2V0LCBMYWJl
bCYgZmFsc2VUYXJnZXQsIEZhbGxUaHJvdWdoTW9kZSBmYWxsVGhyb3VnaE1vZGUpCiB7CiAgICAg
aWYgKFVOTElLRUxZKG5lZWRzRGVidWdIb29rKCkpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdERl
YnVnSG9vayh0aGlzKTsKIAotICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJFeHByMSA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gYWZ0ZXJFeHByMSA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwogICAgIGlmIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwcjEsIGFmdGVyRXhwcjEuZ2V0
KCksIGZhbHNlVGFyZ2V0LCBGYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CiAgICAgZWxzZSAKQEAgLTIw
OTEsMTAgKzIwOTEsMTAgQEAgdm9pZCBMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNvZGVJbkNvbmRp
dGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwKIFJlZ2lzdGVySUQqIENv
bmRpdGlvbmFsTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV3RHN0ID0gZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKLSAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZUVs
c2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICBSZWZQdHI8TGFiZWw+IGFmdGVyRWxzZSA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gYmVmb3JlRWxzZSA9IGdlbmVy
YXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gYWZ0ZXJFbHNlID0gZ2VuZXJhdG9yLm5l
d0xhYmVsKCk7CiAKLSAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9sb2dpY2FsLCBi
ZWZvcmVUaGVuLmdldCgpLCBiZWZvcmVFbHNlLmdldCgpLCBGYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVUaGVuLmdldCgpKTsKIApAQCAtMjU2NCwx
NiArMjU2NCwxNiBAQCBib29sIElmRWxzZU5vZGU6OnRyeUZvbGRCcmVha0FuZENvbnRpbnVlKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFN0YXRlbWVudAogCiB2b2lkIElmRWxzZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7Ci0gICAgUmVmUHRyPExhYmVsPiBiZWZvcmVUaGVuID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7Ci0gICAgUmVmUHRyPExhYmVsPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
Ci0gICAgUmVmUHRyPExhYmVsPiBhZnRlckVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAg
ICBSZWY8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWY8
TGFiZWw+IGJlZm9yZUVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+
IGFmdGVyRWxzZSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgTGFiZWwqIHRydWVUYXJn
ZXQgPSBiZWZvcmVUaGVuLmdldCgpOwotICAgIExhYmVsKiBmYWxzZVRhcmdldCA9IGJlZm9yZUVs
c2UuZ2V0KCk7CisgICAgTGFiZWwqIHRydWVUYXJnZXQgPSBiZWZvcmVUaGVuLnB0cigpOworICAg
IExhYmVsJiBmYWxzZVRhcmdldCA9IGJlZm9yZUVsc2UuZ2V0KCk7CiAgICAgRmFsbFRocm91Z2hN
b2RlIGZhbGxUaHJvdWdoTW9kZSA9IEZhbGxUaHJvdWdoTWVhbnNUcnVlOwogICAgIGJvb2wgZGlk
Rm9sZElmQmxvY2sgPSB0cnlGb2xkQnJlYWtBbmRDb250aW51ZShnZW5lcmF0b3IsIG1faWZCbG9j
aywgdHJ1ZVRhcmdldCwgZmFsbFRocm91Z2hNb2RlKTsKIAotICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZUluQ29uZGl0aW9uQ29udGV4dChtX2NvbmRpdGlvbiwgdHJ1ZVRhcmdldCwgZmFsc2VUYXJnZXQs
IGZhbGxUaHJvdWdoTW9kZSk7CisgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250
ZXh0KG1fY29uZGl0aW9uLCAqdHJ1ZVRhcmdldCwgZmFsc2VUYXJnZXQsIGZhbGxUaHJvdWdoTW9k
ZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVUaGVuLmdldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhtX2lmQmxvY2stPnN0YXJ0T2Zmc2V0KCkpOwog
CkBAIC0yNjAxLDEzICsyNjAxLDEzIEBAIHZvaWQgRG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgTGFi
ZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxv
b3ApOwogCi0gICAgUmVmUHRyPExhYmVsPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICBSZWY8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1p
dExvb3BIaW50KCk7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbihkc3Qs
IG1fc3RhdGVtZW50KTsKIAotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVl
VGFyZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdl
dCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9leHByLCB0
b3BPZkxvb3AuZ2V0KCksIHNjb3BlLT5icmVha1RhcmdldCgpLCBGYWxsVGhyb3VnaE1lYW5zRmFs
c2UpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CkBA
IC0yNjE4LDcgKzI2MTgsNyBAQCB2b2lkIERvV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogdm9pZCBXaGlsZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3Bl
KExhYmVsU2NvcGU6Okxvb3ApOwotICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CisgICAgUmVmPExhYmVsPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4
cHIsIHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIEZhbGxUaHJvdWdoTWVh
bnNUcnVlKTsKIApAQCAtMjYyOCw3ICsyNjI4LDcgQEAgdm9pZCBXaGlsZU5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9zdGF0ZW1lbnQtPnN0YXJ0T2Zmc2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluVGFpbFBvc2l0aW9uKGRzdCwgbV9zdGF0ZW1l
bnQpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogCiAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwciwgdG9wT2ZMb29w
LmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgRmFsbFRocm91Z2hNZWFuc0ZhbHNlKTsKIApA
QCAtMjY0OSw3ICsyNjQ5LDcgQEAgdm9pZCBGb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChtX2V4cHIxKQog
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9l
eHByMSk7CiAKLSAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworICAgIFJlZjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAg
ICAgaWYgKG1fZXhwcjIpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29u
dGV4dChtX2V4cHIyLCB0b3BPZkxvb3AuZ2V0KCksIHNjb3BlLT5icmVha1RhcmdldCgpLCBGYWxs
VGhyb3VnaE1lYW5zVHJ1ZSk7CiAKQEAgLTI2NTksNyArMjY1OSw3IEBAIHZvaWQgRm9yTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRz
dCkKIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluVGFpbFBvc2l0aW9uKGRzdCwgbV9zdGF0ZW1l
bnQpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogICAg
IGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhp
cywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKICAgICBpZiAobV9leHByMykKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCksIG1fZXhwcjMpOwpAQCAtMjc5
MCw3ICsyNzkwLDcgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSZWZQdHI8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJl
ZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICBSZWdpc3RlcklEKiBm
b3JMb29wU3ltYm9sVGFibGUgPSBudWxscHRyOwogICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNj
b3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1p
emUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6OklzTmVzdGVkLCAmZm9yTG9v
cFN5bWJvbFRhYmxlKTsKQEAgLTI4MTcsOCArMjgxNyw4IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQog
ICAgIC8vIEluZGV4ZWQgcHJvcGVydHkgbG9vcC4KICAgICB7CiAgICAgICAgIExhYmVsU2NvcGVQ
dHIgc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAg
ICAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAg
ICAgICAgUmVmUHRyPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAg
ICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAg
IFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCiAgICAgICAgIGxl
bmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
aSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVy
KDApKTsKQEAgLTI4MzAsNyArMjgzMCw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRFcXVhbGl0eU9wKG9wX2xl
c3MsIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0
KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0luZGV4ZWRQcm9wZXJ0eShyZXN1bHQuZ2V0
KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZh
bHNlKHJlc3VsdC5nZXQoKSwgc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNjb3BlLT5jb250aW51ZVRhcmdl
dCgpKTsKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhTdHJpbmcocHJvcGVydHlOYW1l
LmdldCgpLCBpLmdldCgpKTsKICAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9y
LCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwpAQCAtMjg0Myw3ICsyODQzLDcgQEAgdm9pZCBGb3JJbk5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmls
ZXJFbmRPZmZzZXQpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+Y29udGlu
dWVUYXJnZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4
dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29r
KG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZvciBlYWNo
IGZvci4uaW4gaXRlcmF0aW9uLgpAQCAtMjg1Nyw4ICsyODU3LDggQEAgdm9pZCBGb3JJbk5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiAgICAgLy8gU3RydWN0dXJlIHByb3BlcnR5IGxvb3AuCiAgICAgewogICAgICAgICBMYWJl
bFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9v
cCk7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7Ci0gICAgICAgIFJlZlB0cjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OworICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwor
ICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAg
ICAgICBlbnVtZXJhdG9ySW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpLCBqc051bWJlcigwKSk7CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9w
ZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CkBAIC0yODcwLDcgKzI4NzAsNyBA
QCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0VW5hcnlPcChvcF9lcV9udWxsLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1
ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEhh
c1N0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1l
LmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksIHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJn
ZXQoKSk7CiAKICAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0
eU5hbWUuZ2V0KCkpOwogCkBAIC0yODgyLDcgKzI4ODIsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkK
IAogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9m
ZnNldCk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJn
ZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdl
dCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9v
cEl0ZXJhdGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEluYyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJh
dG9yLmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwpAQCAtMjg5Nyw4ICsyODk3LDggQEAg
dm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiAgICAgLy8gR2VuZXJpYyBwcm9wZXJ0eSBsb29wLgogICAgIHsK
ICAgICAgICAgTGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExh
YmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVy
YXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWZQdHI8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKKyAgICAgICAgUmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKKyAgICAgICAgUmVmPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CiAKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKIApAQCAtMjkxMSw3ICsyOTExLDcgQEAgdm9pZCBGb3JJbk5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxv
b3BFbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0SGFzR2VuZXJpY1Byb3BlcnR5
KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIHNjb3BlLT5jb250aW51ZVRh
cmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCks
ICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAKICAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFk
ZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwogCkBAIC0yOTE5LDcgKzI5MTksNyBA
QCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3N0YXRlbWVudCk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGlu
dWVUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51
ZVRhcmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0
Rm9yTG9vcEl0ZXJhdGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdEluYyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEVudW1lcmF0b3JHZW5lcmljUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51
bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKQEAgLTMwMDcsMTMgKzMwMDcs
MTMgQEAgdm9pZCBGb3JPZk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiBMYWJlbCogQ29udGludWVOb2RlOjp0cml2aWFsVGFy
Z2V0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IpCiB7CiAgICAgaWYgKGdlbmVyYXRvci5z
aG91bGRFbWl0RGVidWdIb29rcygpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLmNvbnRpbnVl
VGFyZ2V0KG1faWRlbnQpOwogICAgIEFTU0VSVChzY29wZSk7CiAKICAgICBpZiAoZ2VuZXJhdG9y
LmxhYmVsU2NvcGVEZXB0aCgpICE9IHNjb3BlLT5zY29wZURlcHRoKCkpCi0gICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBzY29wZS0+Y29udGlu
dWVUYXJnZXQoKTsKIH0KQEAgLTMwMjMsMTEgKzMwMjMsMTEgQEAgdm9pZCBDb250aW51ZU5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikK
ICAgICBMYWJlbFNjb3BlUHRyIHNjb3BlID0gZ2VuZXJhdG9yLmNvbnRpbnVlVGFyZ2V0KG1faWRl
bnQpOwogICAgIEFTU0VSVChzY29wZSk7CiAKLSAgICBib29sIGhhc0ZpbmFsbHkgPSBnZW5lcmF0
b3IuZW1pdEp1bXBWaWFGaW5hbGx5SWZOZWVkZWQoc2NvcGUtPnNjb3BlRGVwdGgoKSwgc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOworICAgIGJvb2wgaGFzRmluYWxseSA9IGdlbmVyYXRvci5lbWl0
SnVtcFZpYUZpbmFsbHlJZk5lZWRlZChzY29wZS0+c2NvcGVEZXB0aCgpLCAqc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogICAgIGlmICghaGFzRmluYWxseSkgewogICAgICAgICBpbnQgbGV4aWNh
bFNjb3BlSW5kZXggPSBnZW5lcmF0b3IubGFiZWxTY29wZURlcHRoVG9MZXhpY2FsU2NvcGVJbmRl
eChzY29wZS0+c2NvcGVEZXB0aCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLnJlc3RvcmVTY29wZVJl
Z2lzdGVyKGxleGljYWxTY29wZUluZGV4KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHNj
b3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7CiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3coZW5kT2Zmc2V0KCkpOwpAQCAtMzAzOCwxNSArMzAzOCwxNSBAQCB2b2lkIENv
bnRpbnVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqKQogTGFiZWwqIEJyZWFrTm9kZTo6dHJpdmlhbFRhcmdldChCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yKQogewogICAgIGlmIChnZW5lcmF0b3Iuc2hvdWxkRW1pdERlYnVnSG9v
a3MoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
TGFiZWxTY29wZVB0ciBzY29wZSA9IGdlbmVyYXRvci5icmVha1RhcmdldChtX2lkZW50KTsKICAg
ICBBU1NFUlQoc2NvcGUpOwogCiAgICAgaWYgKGdlbmVyYXRvci5sYWJlbFNjb3BlRGVwdGgoKSAh
PSBzY29wZS0+c2NvcGVEZXB0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2NvcGUtPmJyZWFrVGFyZ2V0KCk7CisgICAgcmV0dXJu
ICZzY29wZS0+YnJlYWtUYXJnZXQoKTsKIH0KIAogdm9pZCBCcmVha05vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKQEAgLTMyMDQsMTgg
KzMyMDQsMTcgQEAgU3dpdGNoSW5mbzo6U3dpdGNoVHlwZSBDYXNlQmxvY2tOb2RlOjp0cnlUYWJs
ZVN3aXRjaChWZWN0b3I8RXhwcmVzc2lvbk5vZGUqLCA4PiYKIAogdm9pZCBDYXNlQmxvY2tOb2Rl
OjplbWl0Qnl0ZWNvZGVGb3JCbG9jayhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBzd2l0Y2hFeHByZXNzaW9uLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0gICAgUmVmUHRy
PExhYmVsPiBkZWZhdWx0TGFiZWw7Ci0gICAgVmVjdG9yPFJlZlB0cjxMYWJlbD4sIDg+IGxhYmVs
VmVjdG9yOworICAgIFZlY3RvcjxSZWY8TGFiZWw+LCA4PiBsYWJlbFZlY3RvcjsKICAgICBWZWN0
b3I8RXhwcmVzc2lvbk5vZGUqLCA4PiBsaXRlcmFsVmVjdG9yOwogICAgIGludDMyX3QgbWluX251
bSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpOwogICAgIGludDMyX3QgbWF4
X251bSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpOwogICAgIFN3aXRjaElu
Zm86OlN3aXRjaFR5cGUgc3dpdGNoVHlwZSA9IHRyeVRhYmxlU3dpdGNoKGxpdGVyYWxWZWN0b3Is
IG1pbl9udW0sIG1heF9udW0pOwogCisgICAgUmVmPExhYmVsPiBkZWZhdWx0TGFiZWwgPSBnZW5l
cmF0b3IubmV3TGFiZWwoKTsKICAgICBpZiAoc3dpdGNoVHlwZSAhPSBTd2l0Y2hJbmZvOjpTd2l0
Y2hOb25lKSB7CiAgICAgICAgIC8vIFByZXBhcmUgdGhlIHZhcmlvdXMgbGFiZWxzCiAgICAgICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsaXRlcmFsVmVjdG9yLnNpemUoKTsgaSsrKQogICAg
ICAgICAgICAgbGFiZWxWZWN0b3IuYXBwZW5kKGdlbmVyYXRvci5uZXdMYWJlbCgpKTsKLSAgICAg
ICAgZGVmYXVsdExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgICAgIGdlbmVyYXRv
ci5iZWdpblN3aXRjaChzd2l0Y2hFeHByZXNzaW9uLCBzd2l0Y2hUeXBlKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBTZXR1cCBqdW1wcwpAQCAtMzIzNCw3ICszMjMzLDYgQEAgdm9pZCBDYXNl
QmxvY2tOb2RlOjplbWl0Qnl0ZWNvZGVGb3JCbG9jayhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlckkKICAgICAgICAgICAgIGxhYmVsVmVjdG9yLmFwcGVuZChnZW5lcmF0b3Iu
bmV3TGFiZWwoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoY2xhdXNl
VmFsLmdldCgpLCBsYWJlbFZlY3RvcltsYWJlbFZlY3Rvci5zaXplKCkgLSAxXS5nZXQoKSk7CiAg
ICAgICAgIH0KLSAgICAgICAgZGVmYXVsdExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChkZWZhdWx0TGFiZWwuZ2V0KCkpOwogICAgIH0KIApA
QCAtMzI1OSw3ICszMjU3LDcgQEAgdm9pZCBDYXNlQmxvY2tOb2RlOjplbWl0Qnl0ZWNvZGVGb3JC
bG9jayhCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlckkKICAgICBBU1NFUlQo
aSA9PSBsYWJlbFZlY3Rvci5zaXplKCkpOwogICAgIGlmIChzd2l0Y2hUeXBlICE9IFN3aXRjaElu
Zm86OlN3aXRjaE5vbmUpIHsKICAgICAgICAgQVNTRVJUKGxhYmVsVmVjdG9yLnNpemUoKSA9PSBs
aXRlcmFsVmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbmRTd2l0Y2gobGFiZWxW
ZWN0b3Iuc2l6ZSgpLCBsYWJlbFZlY3Rvci5kYXRhKCksIGxpdGVyYWxWZWN0b3IuZGF0YSgpLCBk
ZWZhdWx0TGFiZWwuZ2V0KCksIG1pbl9udW0sIG1heF9udW0pOworICAgICAgICBnZW5lcmF0b3Iu
ZW5kU3dpdGNoKGxhYmVsVmVjdG9yLnNpemUoKSwgbGFiZWxWZWN0b3IsIGxpdGVyYWxWZWN0b3Iu
ZGF0YSgpLCBkZWZhdWx0TGFiZWwuZ2V0KCksIG1pbl9udW0sIG1heF9udW0pOwogICAgIH0KIH0K
IApAQCAtMzMyMCw3ICszMzE4LDcgQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIFJlZlB0cjxMYWJl
bD4gZmluYWxseUxhYmVsOwogICAgIFJlZlB0cjxMYWJlbD4gZmluYWxseUVuZExhYmVsOwogCi0g
ICAgUmVmUHRyPExhYmVsPiB0cnlTdGFydExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Cisg
ICAgUmVmPExhYmVsPiB0cnlTdGFydExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbCh0cnlTdGFydExhYmVsLmdldCgpKTsKIAogICAgIGlmIChtX2Zp
bmFsbHlCbG9jaykgewpAQCAtMzMyOCwzMCArMzMyNiwzMCBAQCB2b2lkIFRyeU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAg
ICAgICAgIGZpbmFsbHlMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgICAgICBmaW5h
bGx5RW5kTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgICAgICBnZW5lcmF0b3Iu
cHVzaEZpbmFsbHlDb250cm9sRmxvd1Njb3BlKGZpbmFsbHlMYWJlbC5nZXQoKSk7CisgICAgICAg
IGdlbmVyYXRvci5wdXNoRmluYWxseUNvbnRyb2xGbG93U2NvcGUoKmZpbmFsbHlMYWJlbCk7CiAg
ICAgfQogICAgIGlmIChtX2NhdGNoQmxvY2spIHsKICAgICAgICAgY2F0Y2hMYWJlbCA9IGdlbmVy
YXRvci5uZXdMYWJlbCgpOwogICAgICAgICBjYXRjaEVuZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CiAgICAgfQogCi0gICAgTGFiZWwqIHRyeUhhbmRsZXJMYWJlbCA9IG1fY2F0Y2hCbG9j
ayA/IGNhdGNoTGFiZWwuZ2V0KCkgOiBmaW5hbGx5VmlhVGhyb3dMYWJlbC5nZXQoKTsKKyAgICBM
YWJlbCYgdHJ5SGFuZGxlckxhYmVsID0gbV9jYXRjaEJsb2NrID8gKmNhdGNoTGFiZWwgOiAqZmlu
YWxseVZpYVRocm93TGFiZWw7CiAgICAgSGFuZGxlclR5cGUgdHJ5SGFuZGxlclR5cGUgPSBtX2Nh
dGNoQmxvY2sgPyBIYW5kbGVyVHlwZTo6Q2F0Y2ggOiBIYW5kbGVyVHlwZTo6RmluYWxseTsKICAg
ICBUcnlEYXRhKiB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1c2hUcnkodHJ5U3RhcnRMYWJlbC5nZXQo
KSwgdHJ5SGFuZGxlckxhYmVsLCB0cnlIYW5kbGVyVHlwZSk7CiAKICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUoZHN0LCBtX3RyeUJsb2NrKTsKIAogICAgIGlmIChtX2ZpbmFsbHlCbG9jaykKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGZpbmFsbHlMYWJlbC5nZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcCgqZmluYWxseUxhYmVsKTsKICAgICBlbHNlCi0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChjYXRjaEVuZExhYmVsLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKCpjYXRjaEVuZExhYmVsKTsKIAotICAgIFJlZlB0cjxMYWJlbD4gZW5kVHJ5TGFiZWwgPSBn
ZW5lcmF0b3IuZW1pdExhYmVsKGdlbmVyYXRvci5uZXdMYWJlbCgpLmdldCgpKTsKKyAgICBSZWY8
TGFiZWw+IGVuZFRyeUxhYmVsID0gZ2VuZXJhdG9yLm5ld0VtaXR0ZWRMYWJlbCgpOwogICAgIGdl
bmVyYXRvci5wb3BUcnkodHJ5RGF0YSwgZW5kVHJ5TGFiZWwuZ2V0KCkpOwogCiAgICAgaWYgKG1f
Y2F0Y2hCbG9jaykgewogICAgICAgICAvLyBVbmNhdWdodCBleGNlcHRpb24gcGF0aDogdGhlIGNh
dGNoIGJsb2NrLgotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNhdGNoTGFiZWwuZ2V0KCkp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpjYXRjaExhYmVsKTsKICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHRocm93blZhbHVlUmVnaXN0ZXIgPSBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVudXNlZCA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYXRjaCh1bnVzZWQsIHRocm93blZhbHVlUmVn
aXN0ZXIuZ2V0KCkpOwpAQCAtMzM2MSw3ICszMzU5LDcgQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0
ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAg
ICAgICBpZiAobV9maW5hbGx5QmxvY2spIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjYXRjaCBi
bG9jayB0aHJvd3MgYW4gZXhjZXB0aW9uIGFuZCB3ZSBoYXZlIGEgZmluYWxseSBibG9jaywgdGhl
biB0aGUgZmluYWxseQogICAgICAgICAgICAgLy8gYmxvY2sgc2hvdWxkICJjYXRjaCIgdGhhdCBl
eGNlcHRpb24uCi0gICAgICAgICAgICB0cnlEYXRhID0gZ2VuZXJhdG9yLnB1c2hUcnkoY2F0Y2hM
YWJlbC5nZXQoKSwgZmluYWxseVZpYVRocm93TGFiZWwuZ2V0KCksIEhhbmRsZXJUeXBlOjpGaW5h
bGx5KTsKKyAgICAgICAgICAgIHRyeURhdGEgPSBnZW5lcmF0b3IucHVzaFRyeSgqY2F0Y2hMYWJl
bCwgKmZpbmFsbHlWaWFUaHJvd0xhYmVsLCBIYW5kbGVyVHlwZTo6RmluYWxseSk7CiAgICAgICAg
IH0KIAogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1c2hDYXRjaFNjb3BlKG1fbGV4aWNhbFZhcmlh
Ymxlcyk7CkBAIC0zMzc2LDExICszMzc0LDExIEBAIHZvaWQgVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIAogICAgICAg
ICBpZiAobV9maW5hbGx5QmxvY2spIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0U2V0Q29t
cGxldGlvblR5cGUoQ29tcGxldGlvblR5cGU6Ok5vcm1hbCk7Ci0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXAoZmluYWxseUxhYmVsLmdldCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5w
b3BUcnkodHJ5RGF0YSwgZmluYWxseVZpYVRocm93TGFiZWwuZ2V0KCkpOworICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wKCpmaW5hbGx5TGFiZWwpOworICAgICAgICAgICAgZ2VuZXJhdG9y
LnBvcFRyeSh0cnlEYXRhLCAqZmluYWxseVZpYVRocm93TGFiZWwpOwogICAgICAgICB9CiAKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjYXRjaEVuZExhYmVsLmdldCgpKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbCgqY2F0Y2hFbmRMYWJlbCk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZUNvbnRyb2xGbG93KG1fY2F0Y2hCbG9jay0+ZW5kT2Zmc2V0KCkgKyAxKTsKICAg
ICB9CiAKQEAgLTMzODgsMTMgKzMzODYsMTMgQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBG
aW5hbGx5Q29udGV4dCBmaW5hbGx5Q29udGV4dCA9IGdlbmVyYXRvci5wb3BGaW5hbGx5Q29udHJv
bEZsb3dTY29wZSgpOwogCiAgICAgICAgIC8vIEVudHJ5IHRvIHRoZSBmaW5hbGx5IGJsb2NrIGZv
ciBDb21wbGV0aW9uVHlwZTo6VGhyb3cuCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmlu
YWxseVZpYVRocm93TGFiZWwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpm
aW5hbGx5VmlhVGhyb3dMYWJlbCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVudXNlZCA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYXRjaChnZW5lcmF0
b3IuY29tcGxldGlvblZhbHVlUmVnaXN0ZXIoKSwgdW51c2VkKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRTZXRDb21wbGV0aW9uVHlwZShDb21wbGV0aW9uVHlwZTo6VGhyb3cpOwogCiAgICAgICAg
IC8vIEVudHJ5IHRvIHRoZSBmaW5hbGx5IGJsb2NrIGZvciBDb21wbGV0aW9uVHlwZXMgb3RoZXIg
dGhhbiBUaHJvdy4KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChmaW5hbGx5TGFiZWwuZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpmaW5hbGx5TGFiZWwpOwogICAgICAg
ICBnZW5lcmF0b3IucmVzdG9yZVNjb3BlUmVnaXN0ZXIoKTsKIAogICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gc2F2ZWRDb21wbGV0aW9uVHlwZVJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwpAQCAtMzQwNCw4ICszNDAyLDggQEAgdm9pZCBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhmaW5hbGx5U3RhcnRPZmZzZXQpOwogICAg
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJblRhaWxQb3NpdGlvbihkc3QsIG1fZmluYWxseUJsb2Nr
KTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEZpbmFsbHlDb21wbGV0aW9uKGZpbmFsbHlDb250
ZXh0LCBzYXZlZENvbXBsZXRpb25UeXBlUmVnaXN0ZXIuZ2V0KCksIGZpbmFsbHlFbmRMYWJlbC5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZmluYWxseUVuZExhYmVsLmdldCgp
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRGaW5hbGx5Q29tcGxldGlvbihmaW5hbGx5Q29udGV4
dCwgc2F2ZWRDb21wbGV0aW9uVHlwZVJlZ2lzdGVyLmdldCgpLCAqZmluYWxseUVuZExhYmVsKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqZmluYWxseUVuZExhYmVsKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cobV9maW5hbGx5QmxvY2stPmVuZE9mZnNl
dCgpICsgMSk7CiAgICAgfQogfQpAQCAtMzU1NCwxMyArMzU1MiwxMyBAQCB2b2lkIEZ1bmN0aW9u
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqKQogICAgIGNhc2UgU291cmNlUGFyc2VNb2RlOjpBc3luY0Fycm93RnVuY3Rpb25Cb2R5TW9k
ZToKICAgICBjYXNlIFNvdXJjZVBhcnNlTW9kZTo6QXN5bmNGdW5jdGlvbkJvZHlNb2RlOgogICAg
IGNhc2UgU291cmNlUGFyc2VNb2RlOjpHZW5lcmF0b3JCb2R5TW9kZTogewotICAgICAgICBSZWZQ
dHI8TGFiZWw+IGdlbmVyYXRvckJvZHlMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAg
ICAgICBSZWY8TGFiZWw+IGdlbmVyYXRvckJvZHlMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OwogICAgICAgICB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gY29uZGl0aW9uID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFcXVh
bGl0eU9wKG9wX3N0cmljdGVxLCBjb25kaXRpb24uZ2V0KCksIGdlbmVyYXRvci5nZW5lcmF0b3JS
ZXN1bWVNb2RlUmVnaXN0ZXIoKSwgZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIGpzTnVtYmVy
KHN0YXRpY19jYXN0PGludDMyX3Q+KEpTR2VuZXJhdG9yRnVuY3Rpb246OkdlbmVyYXRvclJlc3Vt
ZU1vZGU6Ok5vcm1hbE1vZGUpKSkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZU
cnVlKGNvbmRpdGlvbi5nZXQoKSwgZ2VuZXJhdG9yQm9keUxhYmVsLmdldCgpKTsKIAotICAgICAg
ICAgICAgUmVmUHRyPExhYmVsPiB0aHJvd0xhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Cisg
ICAgICAgICAgICBSZWY8TGFiZWw+IHRocm93TGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcChvcF9zdHJpY3RlcSwgY29uZGl0
aW9uLmdldCgpLCBnZW5lcmF0b3IuZ2VuZXJhdG9yUmVzdW1lTW9kZVJlZ2lzdGVyKCksIGdlbmVy
YXRvci5lbWl0TG9hZChudWxscHRyLCBqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihKU0dl
bmVyYXRvckZ1bmN0aW9uOjpHZW5lcmF0b3JSZXN1bWVNb2RlOjpUaHJvd01vZGUpKSkpOwogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmRpdGlvbi5nZXQoKSwgdGhyb3dM
YWJlbC5nZXQoKSk7CiAKQEAgLTM1NzQsNyArMzU3Miw3IEBAIHZvaWQgRnVuY3Rpb25Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiAK
ICAgICAgICAgZW1pdFN0YXRlbWVudHNCeXRlY29kZShnZW5lcmF0b3IsIGdlbmVyYXRvci5pZ25v
cmVkUmVzdWx0KCkpOwogCi0gICAgICAgIFJlZlB0cjxMYWJlbD4gZG9uZSA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOworICAgICAgICBSZWY8TGFiZWw+IGRvbmUgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChkb25lLmdldCgpKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRSZXR1cm4oZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIGpzVW5kZWZpbmVk
KCkpKTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzE2LDggKzM3MTQsOCBAQCBSZWdpc3RlcklEKiBD
bGFzc0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRAogICAgICAgICBpZiAobV9jbGFzc0hlcml0YWdlKSB7CiAgICAgICAgICAgICBj
b25zdHJ1Y3RvciA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CiAgICAgICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNOdWxsTGFiZWwgPSBn
ZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgICAgIFJlZlB0cjxMYWJlbD4gZG9uZSA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICAgICAgUmVmPExhYmVsPiBzdXBlcmNsYXNzSXNO
dWxsTGFiZWwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgICAgIFJlZjxMYWJlbD4g
ZG9uZSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGwsIHRlbXBSZWdpc3Rl
ci5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSksIHN1cGVyY2xhc3NJc051bGxMYWJlbC5nZXQoKSk7
CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5ld0RlZmF1bHRDb25zdHJ1Y3Rvcihjb25zdHJ1
Y3Rvci5nZXQoKSwgQ29uc3RydWN0b3JLaW5kOjpFeHRlbmRzLCBtX25hbWUsIGVjbWFOYW1lKCks
IG1fY2xhc3NTb3VyY2UpOwpAQCAtMzc0NCwyMCArMzc0MiwyMCBAQCBSZWdpc3RlcklEKiBDbGFz
c0V4cHJOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRAogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcFJlZ2lzdGVyID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaHJvdyBUeXBlRXJyb3Ig
aWYgaXQncyBhIGdlbmVyYXRvciBmdW5jdGlvbi4KLSAgICAgICAgUmVmUHRyPExhYmVsPiBzdXBl
cmNsYXNzSXNVbmRlZmluZWRMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBS
ZWY8TGFiZWw+IHN1cGVyY2xhc3NJc1VuZGVmaW5lZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdElzVW5k
ZWZpbmVkKHRlbXBSZWdpc3Rlci5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSksIHN1cGVyY2xhc3NJ
c1VuZGVmaW5lZExhYmVsLmdldCgpKTsKIAotICAgICAgICBSZWZQdHI8TGFiZWw+IHN1cGVyY2xh
c3NJc051bGxMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWY8TGFiZWw+
IHN1cGVyY2xhc3NJc051bGxMYWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wX2VxX251bGws
IHRlbXBSZWdpc3Rlci5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSksIHN1cGVyY2xhc3NJc051bGxM
YWJlbC5nZXQoKSk7CiAKLSAgICAgICAgUmVmUHRyPExhYmVsPiBzdXBlcmNsYXNzSXNPYmplY3RM
YWJlbCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBSZWY8TGFiZWw+IHN1cGVyY2xh
c3NJc09iamVjdExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1pdElzT2JqZWN0KHRlbXBSZWdpc3Rlci5nZXQo
KSwgc3VwZXJjbGFzcy5nZXQoKSksIHN1cGVyY2xhc3NJc09iamVjdExhYmVsLmdldCgpKTsKICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzdXBlcmNsYXNzSXNVbmRlZmluZWRMYWJlbC5nZXQo
KSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJU
aGUgc3VwZXJjbGFzcyBpcyBub3QgYW4gb2JqZWN0LiIpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMYWJlbChzdXBlcmNsYXNzSXNPYmplY3RMYWJlbC5nZXQoKSk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0R2V0QnlJZChwcm90b1BhcmVudC5nZXQoKSwgc3VwZXJjbGFzcy5nZXQoKSwgZ2VuZXJh
dG9yLnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUpOwogCi0gICAgICAgIFJlZlB0cjxMYWJlbD4g
cHJvdG9QYXJlbnRJc09iamVjdE9yTnVsbExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Cisg
ICAgICAgIFJlZjxMYWJlbD4gcHJvdG9QYXJlbnRJc09iamVjdE9yTnVsbExhYmVsID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0
b3IuZW1pdFVuYXJ5T3Aob3BfaXNfb2JqZWN0X29yX251bGwsIHRlbXBSZWdpc3Rlci5nZXQoKSwg
cHJvdG9QYXJlbnQuZ2V0KCkpLCBwcm90b1BhcmVudElzT2JqZWN0T3JOdWxsTGFiZWwuZ2V0KCkp
OwogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRVbmFyeU9w
KG9wX2lzX2Z1bmN0aW9uLCB0ZW1wUmVnaXN0ZXIuZ2V0KCksIHByb3RvUGFyZW50LmdldCgpKSwg
cHJvdG9QYXJlbnRJc09iamVjdE9yTnVsbExhYmVsLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIlRoZSB2YWx1ZSBvZiB0aGUgc3VwZXJj
bGFzcydzIHByb3RvdHlwZSBwcm9wZXJ0eSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKQEAgLTM4NDYs
NyArMzg0NCw3IEBAIFJlZ2lzdGVySUQqIERlc3RydWN0dXJpbmdBc3NpZ25tZW50Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0CiBzdGF0aWMgdm9pZCBhc3NpZ25E
ZWZhdWx0VmFsdWVJZlVuZGVmaW5lZChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBtYXliZVVuZGVmaW5lZCwgRXhwcmVzc2lvbk5vZGUqIGRlZmF1bHRWYWx1ZSkKIHsK
ICAgICBBU1NFUlQoZGVmYXVsdFZhbHVlKTsKLSAgICBSZWZQdHI8TGFiZWw+IGlzTm90VW5kZWZp
bmVkID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgUmVmPExhYmVsPiBpc05vdFVuZGVmaW5l
ZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2Uo
Z2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIG1heWJl
VW5kZWZpbmVkKSwgaXNOb3RVbmRlZmluZWQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShtYXliZVVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGlzTm90VW5kZWZpbmVkLmdldCgpKTsKQEAgLTM4NzIsNyArMzg3MCw3IEBAIHZvaWQgQXJyYXlQ
YXR0ZXJuTm9kZTo6YmluZFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIHJocykKICAgICAgICAgc3dpdGNoICh0YXJnZXQuYmluZGluZ1R5cGUpIHsKICAgICAg
ICAgY2FzZSBCaW5kaW5nVHlwZTo6RWxpc2lvbjoKICAgICAgICAgY2FzZSBCaW5kaW5nVHlwZTo6
RWxlbWVudDogewotICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBpdGVyYXRpb25Ta2lwcGVkID0g
Z2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgICAgICBSZWY8TGFiZWw+IGl0ZXJhdGlvblNr
aXBwZWQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICAgICAgICAgIGlmICghZG9uZSkKICAg
ICAgICAgICAgICAgICBkb25lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAg
ICAgZWxzZQpAQCAtMzg4NSw3ICszODgzLDcgQEAgdm9pZCBBcnJheVBhdHRlcm5Ob2RlOjpiaW5k
VmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogcmhzKQogICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKHZhbHVlLmdldCgpLCB2YWx1ZS5nZXQoKSwg
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS52YWx1ZSk7CiAKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8TGFiZWw+IHZhbHVlSXNTZXQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICAgICAgICAgICAgICBSZWY8TGFiZWw+IHZhbHVlSXNTZXQgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAodmFsdWVJc1NldC5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChpdGVyYXRpb25Ta2lw
cGVkLmdldCgpKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQodmFsdWUuZ2V0
KCksIGpzVW5kZWZpbmVkKCkpOwpAQCAtMzkwMyw3ICszOTAxLDcgQEAgdm9pZCBBcnJheVBhdHRl
cm5Ob2RlOjpiaW5kVmFsdWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogcmhzKQogICAgICAgICBjYXNlIEJpbmRpbmdUeXBlOjpSZXN0RWxlbWVudDogewogICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFycmF5ID0gZ2VuZXJhdG9yLmVtaXROZXdBcnJheShn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIDAsIDApOwogCi0gICAgICAgICAgICBSZWZQdHI8TGFi
ZWw+IGl0ZXJhdGlvbkRvbmUgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgICAgIFJl
ZjxMYWJlbD4gaXRlcmF0aW9uRG9uZSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgICAgICAg
ICAgaWYgKCFkb25lKQogICAgICAgICAgICAgICAgIGRvbmUgPSBnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0zOTExLDcgKzM5MDksNyBAQCB2b2lkIEFycmF5
UGF0dGVybk5vZGU6OmJpbmRWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiByaHMpCiAKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChp
bmRleC5nZXQoKSwganNOdW1iZXIoMCkpOwotICAgICAgICAgICAgUmVmUHRyPExhYmVsPiBsb29w
U3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgICAgIFJlZjxMYWJlbD4gbG9v
cFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB2YWx1ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKQEAgLTM5MzEsNyArMzkyOSw3IEBA
IHZvaWQgQXJyYXlQYXR0ZXJuTm9kZTo6YmluZFZhbHVlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIHJocykKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxM
YWJlbD4gaXRlcmF0b3JDbG9zZWQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWY8TGFi
ZWw+IGl0ZXJhdG9yQ2xvc2VkID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wSWZUcnVlKGRvbmUuZ2V0KCksIGl0ZXJhdG9yQ2xvc2VkLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IuZ2V0KCksIHRoaXMpOwogICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoaXRlcmF0b3JDbG9zZWQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCmluZGV4IDkzYzYxODk3NjcwMzRkY2I3ZmQxZTMyMzJkOTk3YzQ3MjU4
ZGUzMzIuLjg0YTRjZmIyM2Q5ODNlZjdkZDliZjU2MjQ4MTlmM2YzOTBjN2UyMjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTE5MCw3ICsxOTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzTmV3VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZWNvZGVJbnRyaW5zaWNOb2RlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZW1pdEJ5dGVj
b2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwqLCBMYWJlbCos
IEZhbGxUaHJvdWdoTW9kZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNv
bmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCYsIExhYmVsJiwgRmFsbFRo
cm91Z2hNb2RlKTsKIAogICAgICAgICB2aXJ0dWFsIEV4cHJlc3Npb25Ob2RlKiBzdHJpcFVuYXJ5
UGx1cygpIHsgcmV0dXJuIHRoaXM7IH0KIApAQCAtMjU4LDcgKzI1OCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUganNWYWx1ZShCeXRlY29kZUdlbmVyYXRvciYp
IGNvbnN0ID0gMDsKICAgICBwcml2YXRlOgogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIG92ZXJyaWRlOwotICAgICAg
ICB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYs
IExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIEZhbGxUaHJvdWdoTW9kZSkg
b3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5
dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwmIHRydWVUYXJnZXQsIExhYmVsJiBmYWxzZVRhcmdldCwg
RmFsbFRocm91Z2hNb2RlKSBvdmVycmlkZTsKICAgICB9OwogCiAgICAgY2xhc3MgTnVsbE5vZGUg
OiBwdWJsaWMgQ29uc3RhbnROb2RlIHsKQEAgLTEwMzMsNyArMTAzMyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIHB1YmxpYzoKICAgICAgICAgTG9naWNhbE5vdE5vZGUoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqKTsKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGVt
aXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiB0
cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIEZhbGxUaHJvdWdoTW9kZSkgb3ZlcnJpZGU7
CisgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgTGFiZWwmIHRydWVUYXJnZXQsIExhYmVsJiBmYWxzZVRhcmdldCwgRmFsbFRocm91
Z2hNb2RlKSBvdmVycmlkZTsKICAgICB9OwogCiAgICAgY2xhc3MgQmluYXJ5T3BOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTEwNDIsNyArMTA0Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBCaW5hcnlPcE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgUmVzdWx0VHlw
ZSwgRXhwcmVzc2lvbk5vZGUqIGV4cHIxLCBFeHByZXNzaW9uTm9kZSogZXhwcjIsIE9wY29kZUlE
LCBib29sIHJpZ2h0SGFzQXNzaWdubWVudHMpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRT
dHJjYXQoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZGVzdGluYXRp
b24sIFJlZ2lzdGVySUQqIGxocyA9IDAsIFJlYWRNb2RpZnlSZXNvbHZlTm9kZSogZW1pdEV4cHJl
c3Npb25JbmZvRm9yTWUgPSAwKTsKLSAgICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGVJbkNvbmRpdGlv
bkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFiZWwqIGZh
bHNlVGFyZ2V0LCBGYWxsVGhyb3VnaE1vZGUpIG92ZXJyaWRlOworICAgICAgICB2b2lkIGVtaXRC
eXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsJiB0cnVl
VGFyZ2V0LCBMYWJlbCYgZmFsc2VUYXJnZXQsIEZhbGxUaHJvdWdoTW9kZSkgb3ZlcnJpZGU7CiAK
ICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGxocygpIHsgcmV0dXJuIG1fZXhwcjE7IH07CiAgICAg
ICAgIEV4cHJlc3Npb25Ob2RlKiByaHMoKSB7IHJldHVybiBtX2V4cHIyOyB9OwpAQCAtMTIwNSw3
ICsxMjA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
IG92ZXJyaWRlOwotICAgICAgICB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChC
eXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQs
IEZhbGxUaHJvdWdoTW9kZSkgb3ZlcnJpZGU7CisgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlSW5D
b25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwmIHRydWVUYXJnZXQsIExh
YmVsJiBmYWxzZVRhcmdldCwgRmFsbFRocm91Z2hNb2RlKSBvdmVycmlkZTsKIAogICAgICAgICBF
eHByZXNzaW9uTm9kZSogbV9leHByMTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjI7
Cg==
</data>
<flag name="review"
          id="323413"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>