<?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>227895</bug_id>
          
          <creation_ts>2021-07-12 21:51:49 -0700</creation_ts>
          <short_desc>[Cairo] Don&apos;t pass the current GraphicsContext state to CairoOperations</short_desc>
          <delta_ts>2021-07-26 04:39:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>227780</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1776544</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-12 21:51:49 -0700</bug_when>
    <thetext>[Cairo] Don&apos;t pass the current GraphicsContext state to CairoOperations

r279658 (Bug 227721) changed CairoOperations to take a
GraphicsContextCairo as the first argument. No longer need to
pass the current state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776545</commentid>
    <comment_count>1</comment_count>
      <attachid>433386</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-12 21:56:04 -0700</bug_when>
    <thetext>Created attachment 433386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776554</commentid>
    <comment_count>2</comment_count>
      <attachid>433386</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2021-07-12 23:28:58 -0700</bug_when>
    <thetext>Comment on attachment 433386
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=433386&amp;action=review

&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:672
&gt; -    auto&amp; state = this-&gt;state();
&gt; -    append(createCommand&lt;DrawEllipse&gt;(rect, state.fillColor, state.strokeStyle, state.strokeColor, state.strokeThickness));
&gt; +    append(createCommand&lt;DrawEllipse&gt;(rect));

How does the replay context get hold of all the relevant state that&apos;s not included in the PaintingOperation structs anymore but is then used in Cairo::drawEllipse() or other similar functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776557</commentid>
    <comment_count>3</comment_count>
      <attachid>433386</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-12 23:44:34 -0700</bug_when>
    <thetext>Comment on attachment 433386
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=433386&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp:672
&gt;&gt; +    append(createCommand&lt;DrawEllipse&gt;(rect));
&gt; 
&gt; How does the replay context get hold of all the relevant state that&apos;s not included in the PaintingOperation structs anymore but is then used in Cairo::drawEllipse() or other similar functions?

Good point. CairoOperationRecorder::updateState should call GraphicsContextCairo::updateState. Will fix. Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776755</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-07-13 14:23:19 -0700</bug_when>
    <thetext>I have a question.

Why can&apos;t we merge CairoOperations.cpp in GraphicsContextCairo.cpp? What is the point of having functions like these:

void drawRect(GraphicsContextCairo&amp; platformContext, const FloatRect&amp; rect, ...)
{
    cairo_t* cr = platformContext.cr();
    cairo_save(cr);

    fillRectWithColor(cr, rect, fillColor);

    ...

    cairo_restore(cr);
}

void GraphicsContextCairo::drawRect(const FloatRect&amp; rect, float borderThickness)
{
    ASSERT(!rect.isEmpty());
    auto&amp; state = this-&gt;state();
    Cairo::drawRect(*this, rect, borderThickness, state.fillColor, state.strokeStyle, state.strokeColor);
}

Why do not we move the code inside Cairo::drawRect() to GraphicsContextCairo::drawRect especially Cairo::drawRect() takes an argument of type GraphicsContextCairo?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1776760</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-13 14:45:35 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #4)

That&apos;s exactly what I want to do.
Bug 227780 – [Cairo] All functions in CairoOperations.cpp should be GraphicsContextCairo&apos;s methods

However, I found out that this is not simple as what I thought.
CairoOperationRecorder is a thread-safe display list that transfers drawing commands to worker threads.
However, WebCore::Pattern isn&apos;t a thread-safe object. So CairoOperationRecorder append a command by converting the object to cairo object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778096</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-19 21:52:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/80818847&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779405</commentid>
    <comment_count>7</comment_count>
      <attachid>434192</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-07-25 23:31:04 -0700</bug_when>
    <thetext>Created attachment 434192
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433386</attachid>
            <date>2021-07-12 21:56:04 -0700</date>
            <delta_ts>2021-07-25 23:31:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227895-20210713135602.patch</filename>
            <type>text/plain</type>
            <size>42071</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5ODQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTg5YTYzOWM1ZTJjNzkx
Mzg3ZjAyMjNjZThjYmVjMDU2NDA3ZGI1Mi4uN2EzY2JiMWZmNTQwNjYxYzg5MmU1NjQ4YmFjMjg1
NWJhODlhMWMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIxLTA3LTEyICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtDYWlyb10g
RG9uJ3QgcGFzcyB0aGUgY3VycmVudCBHcmFwaGljc0NvbnRleHQgc3RhdGUgdG8gQ2Fpcm9PcGVy
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjc4OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBy
Mjc5NjU4IChCdWcgMjI3NzIxKSBjaGFuZ2VkIENhaXJvT3BlcmF0aW9ucyB0byB0YWtlIGEKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiBObyBsb25n
ZXIgbmVlZCB0byBwYXNzCisgICAgICAgIHRoZSBjdXJyZW50IHN0YXRlLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFJv
dW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2Fpcm86OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdHbHlwaHMpOgorICAgICAgICAo
V2ViQ29yZTo6Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6
ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlw
c2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlw
aHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAgKE5pY29zaWE6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMpOgorICAgICAgICAoTmljb3NpYTo6Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisKIDIwMjEtMDctMTIgIFNpbW9uIEZy
YXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgU3R5bGVTaGVl
dHMgbG9nIGNoYW5uZWwgYW5kIHNvbWUgbG9nZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXgg
MjI0YTQ1MjkxMmQ0ZTA1M2FjNjI0MGJlMWExZGFiMmQzNjRjNDAzNS4uYTMzNjE5YjVhMTc5MWM3
NDI3ZTJjYzhhZDU3MmFlNTNhM2M4OTA5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC02Nzgs
OCArNjc4LDE0IEBAIHZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgZmlsbEN1cnJlbnRDYWly
b1BhdGgocGxhdGZvcm1Db250ZXh0LCBmaWxsU291cmNlKTsKIH0KIAotdm9pZCBmaWxsUmVjdChH
cmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQor
dm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7CisgICAgZmlsbFJlY3QocGxhdGZvcm1Db250ZXh0LCByZWN0
LCBDYWlybzo6RmlsbFNvdXJjZShwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKSksIENhaXJvOjpTaGFk
b3dTdGF0ZShwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKSkpOworfQorCit2b2lkIGZpbGxSZWN0KEdy
YXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIENhaXJvOjpTaGFkb3dTdGF0ZSBzaGFkb3dT
dGF0ZShwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKSk7CiAgICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlz
aWJsZSgpKSB7CiAgICAgICAgIFNoYWRvd0JsdXIgc2hhZG93KHsgc2hhZG93U3RhdGUuYmx1ciwg
c2hhZG93U3RhdGUuYmx1ciB9LCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmNvbG9y
LCBzaGFkb3dTdGF0ZS5pZ25vcmVUcmFuc2Zvcm1zKTsKICAgICAgICAgc2hhZG93LmRyYXdSZWN0
U2hhZG93KFN0YXRlOjpnZXRDVE0ocGxhdGZvcm1Db250ZXh0KSwgU3RhdGU6OmdldENsaXBCb3Vu
ZHMocGxhdGZvcm1Db250ZXh0KSwgRmxvYXRSb3VuZGVkUmVjdChyZWN0KSwKQEAgLTcwOSw4ICs3
MTUsOSBAQCB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY2FpcgogICAgIGNhaXJvX2ZpbGwoY3IpOwogfQog
Ci12b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNv
bnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKK3ZvaWQgZmlsbFJvdW5kZWRSZWN0KEdyYXBo
aWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBDYWlybzo6U2hhZG93U3RhdGUgc2hh
ZG93U3RhdGUocGxhdGZvcm1Db250ZXh0LnN0YXRlKCkpOwogICAgIGlmIChzaGFkb3dTdGF0ZS5p
c1Zpc2libGUoKSkgewogICAgICAgICBTaGFkb3dCbHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJs
dXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5j
b2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNmb3Jtcyk7CiAgICAgICAgIHNoYWRvdy5kcmF3
UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRmb3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlw
Qm91bmRzKHBsYXRmb3JtQ29udGV4dCksIHJlY3QsCkBAIC03NDAsOCArNzQ3LDExIEBAIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0Um91bmRlZFJlCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgZmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRl
JiBzaGFkb3dTdGF0ZSkKK3ZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QpCiB7CisgICAgRmlsbFNvdXJjZSBmaWxs
U291cmNlKHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpKTsKKyAgICBTaGFkb3dTdGF0ZSBzaGFkb3dT
dGF0ZShwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKSk7CisKICAgICAvLyBGSVhNRTogdGhpcyBzaG91
bGQgbGV2ZXJhZ2UgdGhlIHNwZWNpZmllZCBjb2xvci4KIAogICAgIGlmIChzaGFkb3dTdGF0ZS5p
c1Zpc2libGUoKSkgewpAQCAtNzg0LDggKzc5NCwxMCBAQCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0
UgogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lkIGZpbGxQYXRoKEdyYXBoaWNzQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEZpbGxT
b3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKK3ZvaWQg
ZmlsbFBhdGgoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0
aCYgcGF0aCkKIHsKKyAgICBGaWxsU291cmNlIGZpbGxTb3VyY2UocGxhdGZvcm1Db250ZXh0LnN0
YXRlKCkpOworICAgIFNoYWRvd1N0YXRlIHNoYWRvd1N0YXRlKHBsYXRmb3JtQ29udGV4dC5zdGF0
ZSgpKTsKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogCiAgICAgc2V0
UGF0aE9uQ2Fpcm9Db250ZXh0KGNyLCBwYXRoLmNhaXJvUGF0aCgpKTsKQEAgLTc5Myw4ICs4MDUs
MTAgQEAgdm9pZCBmaWxsUGF0aChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGaWwKICAgICBmaWxsQ3VycmVudENhaXJvUGF0aChw
bGF0Zm9ybUNvbnRleHQsIGZpbGxTb3VyY2UpOwogfQogCi12b2lkIHN0cm9rZVJlY3QoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBT
aGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCit2b2lkIHN0cm9rZVJlY3QoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCiB7CisgICAgU3Ryb2tlU291cmNlIHN0cm9rZVNvdXJjZShwbGF0Zm9ybUNvbnRleHQu
c3RhdGUoKSk7CisgICAgU2hhZG93U3RhdGUgc2hhZG93U3RhdGUocGxhdGZvcm1Db250ZXh0LnN0
YXRlKCkpOwogICAgIGNhaXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAgICAgY2Fp
cm9fc2F2ZShjcik7CiAKQEAgLTgwNyw4ICs4MjEsMTAgQEAgdm9pZCBzdHJva2VSZWN0KEdyYXBo
aWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmwKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotdm9pZCBzdHJva2VQYXRoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0
cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUp
Cit2b2lkIHN0cm9rZVBhdGgoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
Y29uc3QgUGF0aCYgcGF0aCkKIHsKKyAgICBTdHJva2VTb3VyY2Ugc3Ryb2tlU291cmNlKHBsYXRm
b3JtQ29udGV4dC5zdGF0ZSgpKTsKKyAgICBTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShwbGF0Zm9y
bUNvbnRleHQuc3RhdGUoKSk7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3Io
KTsKIAogICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0aC5jYWlyb1BhdGgoKSk7CkBA
IC04MjgsOSArODQ0LDE2IEBAIHZvaWQgY2xlYXJSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KIAotdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZpbGxTb3VyY2UmIGZpbGxTb3VyY2UsIGNvbnN0IFN0cm9rZVNvdXJj
ZSYgc3Ryb2tlU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250LCBkb3VibGUg
c3ludGhldGljQm9sZE9mZnNldCwgY29uc3QgVmVjdG9yPGNhaXJvX2dseXBoX3Q+JiBnbHlwaHMs
IGZsb2F0IHhPZmZzZXQsIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSwgZmxv
YXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgY29uc3Qg
Q29sb3ImIHNoYWRvd0NvbG9yLCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkK
K3ZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwg
ZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNvbnN0IFZlY3RvcjxjYWlyb19nbHlwaF90PiYg
Z2x5cGhzLCBmbG9hdCB4T2Zmc2V0LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9k
ZSkKIHsKLSAgICBkcmF3R2x5cGhzU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgc2hhZG93U3RhdGUs
IHRleHREcmF3aW5nTW9kZSwgc2hhZG93T2Zmc2V0LCBzaGFkb3dDb2xvciwgcG9pbnQsIHNjYWxl
ZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgZm9udFNtb290aGluZ01vZGUpOwor
ICAgIGF1dG8mIHN0YXRlID0gcGxhdGZvcm1Db250ZXh0LnN0YXRlKCk7CisgICAgRmlsbFNvdXJj
ZSBmaWxsU291cmNlKHN0YXRlKTsKKyAgICBTdHJva2VTb3VyY2Ugc3Ryb2tlU291cmNlKHN0YXRl
KTsKKyAgICBTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7CisgICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlID0gc3RhdGUudGV4dERyYXdpbmdNb2RlOworICAgIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcyA9IHN0YXRlLnN0cm9rZVRoaWNrbmVzczsKKworICAgIGRyYXdH
bHlwaHNTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBzaGFkb3dTdGF0ZSwgdGV4dERyYXdpbmdNb2Rl
LCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLCBwb2ludCwgc2NhbGVkRm9u
dCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBmb250U21vb3RoaW5nTW9kZSk7CiAKICAg
ICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIGNhaXJvX3NhdmUoY3Ip
OwpAQCAtOTgxLDE4ICsxMDA0LDIwIEBAIHZvaWQgZHJhd1N1cmZhY2UoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlCiAgICAgY2Fp
cm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBj
b25zdCBDb2xvciYgc3Ryb2tlQ29sb3IpCit2b2lkIGRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQogeworICAgIGF1dG8mIHN0YXRlID0gcGxhdGZvcm1Db250ZXh0LnN0YXRlKCk7
CisKICAgICAvLyBGSVhNRTogaG93IHNob3VsZCBib3JkZXJUaGlja25lc3MgYmUgdXNlZD8KICAg
ICBVTlVTRURfUEFSQU0oYm9yZGVyVGhpY2tuZXNzKTsKIAogICAgIGNhaXJvX3QqIGNyID0gcGxh
dGZvcm1Db250ZXh0LmNyKCk7CiAgICAgY2Fpcm9fc2F2ZShjcik7CiAKLSAgICBmaWxsUmVjdFdp
dGhDb2xvcihjciwgcmVjdCwgZmlsbENvbG9yKTsKKyAgICBmaWxsUmVjdFdpdGhDb2xvcihjciwg
cmVjdCwgc3RhdGUuZmlsbENvbG9yKTsKIAotICAgIGlmIChzdHJva2VTdHlsZSAhPSBOb1N0cm9r
ZSkgewotICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcik7Cisg
ICAgaWYgKHN0YXRlLnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tlKSB7CisgICAgICAgIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY3IsIHN0YXRlLnN0cm9rZUNvbG9yKTsKICAgICAgICAgRmxvYXRSZWN0
IHIocmVjdCk7CiAgICAgICAgIHIuaW5mbGF0ZSgtLjVmKTsKICAgICAgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNyLCByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CkBAIC0xMDAzLDgg
KzEwMjgsMTIgQEAgdm9pZCBkcmF3UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2EKICAgICBjYWlyb19yZXN0b3JlKGNy
KTsKIH0KIAotdm9pZCBkcmF3TGluZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50Miwg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvciwgZmxvYXQg
c3Ryb2tlVGhpY2tuZXNzLCBib29sIHNob3VsZEFudGlhbGlhcykKK3ZvaWQgZHJhd0xpbmUoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7CisgICAgU3Ryb2tlU3R5bGUgc3Ryb2tl
U3R5bGUgPSBwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKS5zdHJva2VTdHlsZTsKKyAgICBDb2xvciBz
dHJva2VDb2xvciA9IHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpLnN0cm9rZUNvbG9yOworICAgIGZs
b2F0IHN0cm9rZVRoaWNrbmVzcyA9IHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpLnN0cm9rZVRoaWNr
bmVzczsKKyAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgp
LnNob3VsZEFudGlhbGlhczsKICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkg
KyBzdHJva2VUaGlja25lc3MgPT0gcG9pbnQyLngoKSk7CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGgg
PSBpc1ZlcnRpY2FsTGluZSA/IHBvaW50Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQyLngoKSAt
IHBvaW50MS54KCk7CiAgICAgaWYgKCFzdHJva2VUaGlja25lc3MgfHwgIXN0cm9rZVdpZHRoKQpA
QCAtMTA2MCw5ICsxMDg5LDkgQEAgdm9pZCBkcmF3TGluZShHcmFwaGljc0NvbnRleHRDYWlybyYg
cGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGMKICAgICAgICAgY2Fp
cm9fc2V0X2FudGlhbGlhcyhjYWlyb0NvbnRleHQsIENBSVJPX0FOVElBTElBU19ERUZBVUxUKTsK
IH0KIAotdm9pZCBkcmF3TGluZXNGb3JUZXh0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCBzdHJva2VUaGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgZHJhd0xpbmVzRm9yVGV4dChHcmFwaGlj
c0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQogewotICAgIENvbG9yIG1vZGlmaWVkQ29sb3Ig
PSBjb2xvcjsKKyAgICBDb2xvciBtb2RpZmllZENvbG9yID0gcGxhdGZvcm1Db250ZXh0LnN0YXRl
KCkuc3Ryb2tlQ29sb3I7CiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRz
QW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQocGxhdGZvcm1Db250ZXh0LCBwb2ludCwgd2lkdGhz
Lmxhc3QoKSwgcHJpbnRpbmcsIG1vZGlmaWVkQ29sb3IsIHN0cm9rZVRoaWNrbmVzcyk7CiAKICAg
ICBWZWN0b3I8RmxvYXRSZWN0LCA0PiBkYXNoQm91bmRzOwpAQCAtMTEwNCw4ICsxMTMzLDkgQEAg
dm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2EKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotdm9p
ZCBkcmF3RWxsaXBzZShHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlLCBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVz
cykKK3ZvaWQgZHJhd0VsbGlwc2UoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAgIGF1dG8mIHN0YXRlID0gcGxhdGZvcm1D
b250ZXh0LnN0YXRlKCk7CiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsK
IAogICAgIGNhaXJvX3NhdmUoY3IpOwpAQCAtMTExNiwxNCArMTE0NiwxNCBAQCB2b2lkIGRyYXdF
bGxpcHNlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgYwogICAgIGNhaXJvX2FyYyhjciwgMC4sIDAuLCAxLiwgMC4sIDIgKiBwaUZs
b2F0KTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIAotICAgIGlmIChmaWxsQ29sb3IuaXNWaXNp
YmxlKCkpIHsKLSAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgZmlsbENvbG9yKTsK
KyAgICBpZiAoc3RhdGUuZmlsbENvbG9yLmlzVmlzaWJsZSgpKSB7CisgICAgICAgIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY3IsIHN0YXRlLmZpbGxDb2xvcik7CiAgICAgICAgIGNhaXJvX2ZpbGxf
cHJlc2VydmUoY3IpOwogICAgIH0KIAotICAgIGlmIChzdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkg
ewotICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdHJva2VDb2xvcik7Ci0gICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MpOworICAgIGlmIChz
dGF0ZS5zdHJva2VTdHlsZSAhPSBOb1N0cm9rZSkgeworICAgICAgICBzZXRTb3VyY2VSR0JBRnJv
bUNvbG9yKGNyLCBzdGF0ZS5zdHJva2VDb2xvcik7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKGNyLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogICAgICAgICBjYWlyb19zdHJva2UoY3Ip
OwogICAgIH0gZWxzZQogICAgICAgICBjYWlyb19uZXdfcGF0aChjcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5o
CmluZGV4IDU0OTg1NjNjZTQ5YzE1ZTM1ZDA4MjU5YzJkMjZkYzdiMTdjZWE4ODUuLjczNTI3NTI4
MzM0M2NiYTU0YjFmOGNhOGJjMDAyM2M0ZWZmMjE3YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCkBAIC0x
MzEsMjYgKzEzMSwyNyBAQCB2b2lkIHNldExpbmVKb2luKEdyYXBoaWNzQ29udGV4dENhaXJvJiwg
TGluZUpvaW4pOwogdm9pZCBzZXRNaXRlckxpbWl0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgZmxv
YXQpOwogCiB2b2lkIGZpbGxSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmlsbFNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxS
ZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBjb25zdCBTaGFkb3dTdGF0ZSYpOwordm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWly
byYsIGNvbnN0IEZsb2F0UmVjdCYpOwordm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWly
byYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7CiB2b2lkIGZpbGxSZWN0KEdyYXBo
aWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgY2Fpcm9fcGF0dGVybl90Kik7Ci12
b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBjb25zdCBTaGFk
b3dTdGF0ZSYpOwotdm9pZCBmaWxsUGF0aChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IFBh
dGgmLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgc3Ryb2tl
UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBjb25z
dCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBzdHJva2VQYXRoKEdy
YXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgUGF0aCYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNv
bnN0IFNoYWRvd1N0YXRlJik7Cit2b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRD
YWlybyYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwordm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKK3ZvaWQgZmlsbFBhdGgoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mLCBjb25zdCBQYXRoJik7Cit2b2lkIHN0cm9rZVJlY3QoR3JhcGhpY3NDb250ZXh0
Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCk7Cit2b2lkIHN0cm9rZVBhdGgoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBQYXRoJik7CiB2b2lkIGNsZWFyUmVjdChHcmFwaGljc0Nv
bnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYpOwogCi12b2lkIGRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU3Ryb2tlU291cmNlJiwg
Y29uc3QgU2hhZG93U3RhdGUmLCBjb25zdCBGbG9hdFBvaW50JiwgY2Fpcm9fc2NhbGVkX2ZvbnRf
dCosIGRvdWJsZSwgY29uc3QgVmVjdG9yPGNhaXJvX2dseXBoX3Q+JiwgZmxvYXQsIFRleHREcmF3
aW5nTW9kZUZsYWdzLCBmbG9hdCwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgQ29sb3ImLCBGb250
U21vb3RoaW5nTW9kZSk7Cit2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBj
b25zdCBGbG9hdFBvaW50JiwgY2Fpcm9fc2NhbGVkX2ZvbnRfdCosIGRvdWJsZSwgY29uc3QgVmVj
dG9yPGNhaXJvX2dseXBoX3Q+JiwgZmxvYXQsIEZvbnRTbW9vdGhpbmdNb2RlKTsKIAogdm9pZCBk
cmF3UGxhdGZvcm1JbWFnZShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNhaXJvX3N1cmZhY2VfdCos
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiwgZmxvYXQsIGNvbnN0IFNoYWRvd1N0YXRlJik7CiB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dENhaXJvJiwgY2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgSW50U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwogV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3U3VyZmFjZShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNhaXJvX3N1
cmZhY2VfdCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIEludGVycG9sYXRp
b25RdWFsaXR5LCBmbG9hdCwgY29uc3QgU2hhZG93U3RhdGUmLCBPcmllbnRhdGlvblNpemluZyBv
cGVyYXRpb25TaXppbmcgPSBPcmllbnRhdGlvblNpemluZzo6Tm9ybWFsKTsKIAotdm9pZCBkcmF3
UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBjb25z
dCBDb2xvciYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYpOwotdm9pZCBkcmF3TGluZShHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jiwg
U3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGJvb2wpOwotdm9pZCBkcmF3TGluZXNG
b3JUZXh0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgY29uc3QgQ29sb3ImKTsKK3Zv
aWQgZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCk7Cit2b2lkIGRyYXdMaW5lKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKK3ZvaWQgZHJhd0xpbmVzRm9yVGV4dChHcmFwaGljc0Nv
bnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wpOwogdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKEdy
YXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUpOwotdm9pZCBkcmF3RWxsaXBzZShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgU3Ryb2tlU3R5bGUsIGNvbnN0IENvbG9yJiwgZmxvYXQp
Owordm9pZCBkcmF3RWxsaXBzZShHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVj
dCYpOwogCiB2b2lkIGRyYXdGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBQ
YXRoJiwgZmxvYXQsIGNvbnN0IENvbG9yJik7CiB2b2lkIGRyYXdGb2N1c1JpbmcoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBjb25zdCBDb2xv
ciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKaW5kZXggYTdhZjBjZWI1MjQ5MDQwNDFlZTEyZDUxZjg5YzZkZjE2Y2IzNjAz
Ny4uMDVkNTg0NTNjMTRkNjg5ZmUwYWEyNjA2NmVmYmRhMjYxMTczZmE0YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBA
IC02OSwxMSArNjksNyBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgRwogICAgIGRvdWJsZSBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKICAgICBBU1NF
UlQoY29udGV4dC5oYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgYXV0byYgc3RhdGUgPSBjb250
ZXh0LnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksCi0gICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250
LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3Rh
dGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCi0gICAgICAgIGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAg
ICBDYWlybzo6ZHJhd0dseXBocygqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHNj
YWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LCBmb250
U21vb3RoaW5nTW9kZSk7CiB9CiAKIFBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggYzViOTc0
OTJmYWNiNjUxM2Y2NDI1NjZiOGM0ZmVkMTQyMzkzODZkMC4uMmJiMjYzMTVkNDk5YTRhNWM1ZjU5
ZWExZjA2NjhmYzIzZjA1YjU1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAt
MTM4LDggKzEzOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7CiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdCgqdGhp
cywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CisgICAgQ2Fpcm86OmRyYXdSZWN0KCp0aGlzLCByZWN0
LCBib3JkZXJUaGlja25lc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpAQCAtMTU0LDE1ICsxNTMsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JgogICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
Q2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUs
IHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CisgICAgQ2Fpcm86OmRyYXdMaW5lKCp0aGlzLCBwb2ludDEsIHBvaW50Mik7CiB9
CiAKIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xl
cyB1c2VkIGluIGxpc3RzLgogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnRoaXMsIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwg
c3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25l
c3MpOworICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqdGhpcywgcmVjdCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0xNzAsOCAr
MTY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgoKnRoaXMsIHBh
dGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CisgICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTc5LDE5ICsxNzUs
MTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VQYXRoKCp0aGlzLCBw
YXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CisgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnRoaXMsIHBhdGgpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywg
cmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworICAgIENhaXJvOjpmaWxsUmVjdCgqdGhpcywgcmVj
dCwgY29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKQEAgLTIxMiw3ICsyMDYsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQwogICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKIAogICAgIENhaXJvOjpTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCp0aGlzLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
KTsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yKTsK
ICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhpcywgcHJldmlvdXNP
cGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwogfQogCkBAIC0yNjUsNyArMjU5LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2sKIHsKICAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KCp0aGlzLCBwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9r
ZUNvbG9yKTsKKyAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKQEAgLTMzNyw4ICszMzEs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUmVjdCgqdGhpcywgcmVjdCwgbGluZVdpZHRo
LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CisgICAgQ2Fpcm86OnN0cm9rZVJlY3QoKnRoaXMsIHJlY3QsIGxpbmVXaWR0aCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQpAQCAt
MzgzLDcgKzM3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRl
ZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKKyAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCp0
aGlzLCByZWN0LCBjb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zOTEsOCAr
Mzg0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdAogICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0g
ICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlzLCByZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCp0aGlzLCByZWN0LCByb3Vu
ZGVkSG9sZVJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQpAQCAtNDMxLDExICs0MjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqCiAg
ICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQogICAgICAgICBmb250U21vb3RoaW5n
ID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwogCi0gICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3R2x5cGhzKCp0aGlzLCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAotICAgICAgICBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNl
dCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Nv
bG9yLAotICAgICAgICBmb250U21vb3RoaW5nKTsKKyAgICBDYWlybzo6ZHJhd0dseXBocygqdGhp
cywgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4
T2Zmc2V0LCBmb250U21vb3RoaW5nKTsKIH0KIAogY2Fpcm9fdCogR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNyKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggNzI1YjZmNTI4MjA4YTE0MDNiNjYxMTkzMDNlNTUw
MmUzNzM2ZDM2ZC4uMmMwYmNlZjNhNTdlYzJkY2U1NTQ3Yjg0NjRjNzkyZDQ1YWY4YjVjMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAKQEAgLTIzNSwxMiArMjM1LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgRmls
bFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Qs
IENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICBzdHJ1Y3QgRmls
bFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+
IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAg
ICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJv
OjpmaWxsUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtMjQ5
LDE4ICsyNDksMTcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsK
KyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCkpOwogfQogCiB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29sb3IsIENhaXJvOjpTaGFkb3dT
dGF0ZT4geworICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29sb3I+IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJl
Y3QoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9u
UmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86
OmZpbGxSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCks
IGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTI2OSw3ICsyNjgsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yKSk7
CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCkBAIC0yOTcsMTYgKzI5NiwxNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
R3JhZGllbnQmIGdyYWRpZW50KQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBz
dHJ1Y3QgRmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxG
bG9hdFJlY3QsIENvbG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6U2hh
ZG93U3RhdGUsIENvbXBvc2l0ZU9wZXJhdG9yPiB7CisgICAgc3RydWN0IEZpbGxSZWN0IGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUmVjdCgp
ID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvJiBwbGF0
Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKKyAgICAgICAgICAgIENv
bXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBwbGF0Zm9ybUNvbnRleHQuY29tcG9z
aXRlT3BlcmF0aW9uKCk7CiAKICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKLSAgICAgICAg
ICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIGFyZzwwPigpLCBhcmc8MT4oKSwg
YXJnPDQ+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRp
b24ocGxhdGZvcm1Db250ZXh0LCBhcmc8NT4oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAgICAg
ICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgYXJnPDA+KCksIGFyZzwxPigp
KTsKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRm
b3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtMzE1
LDI4ICszMTUsMjcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9zaXRl
T3BlcmF0b3IsIGJsZW5kTW9kZSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIHN0cnVjdCBGaWxs
Um91bmRlZFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9h
dFJvdW5kZWRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgc3RydWN0IEZpbGxSb3VuZGVkUmVjdCBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0Um91bmRlZFJlY3QsIENvbG9yLCBCbGVu
ZE1vZGU+IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0Owog
CiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4dCA9
IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwogCi0gICAgICAgICAgICBDYWlybzo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8Mz4o
KSk7CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0
Zm9ybUNvbnRleHQsIHBsYXRmb3JtQ29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYXJnPDI+
KCkpOwogCiAgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJnPDA+KCk7CiAgICAgICAgICAgICBp
ZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRS
ZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgYXJnPDE+KCksIGFyZzw0PigpKTsKKyAgICAgICAg
ICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgYXJn
PDE+KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENhaXJvOjpmaWxsUmVj
dChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBhcmc8MT4oKSwgYXJnPDQ+KCkpOworICAg
ICAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgp
LCBhcmc8MT4oKSk7CiAKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAg
ICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29u
dGV4dCwgcGxhdGZvcm1Db250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92
ZXJyaWRlCkBAIC0zNDUsMTggKzM0NCwxNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xvciwg
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRl
ZFJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIHN0cnVjdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSBmaW5hbCA6IFBhaW50aW5nT3Bl
cmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgRmxvYXRSb3VuZGVkUmVjdCwgQ2Fpcm86
OlNoYWRvd1N0YXRlPiB7CisgICAgc3RydWN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIGZpbmFs
IDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0PiB7CiAgICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgPSBk
ZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpLCB7IH0sIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigp
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKQEAgLTM2NiwxNyArMzY0LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgfTsK
IAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRo
Um91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCkpOwogfQogCiB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3RydWN0
IEZpbGxQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwg
Q2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgIHN0cnVjdCBGaWxs
UGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsKICAg
ICAgICAgdmlydHVhbCB+RmlsbFBhdGgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVj
dXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAg
ewotICAgICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxs
UGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtMzg4LDIwICsz
ODYsMTkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZp
bGxQYXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCkpOwog
fQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxsU291cmNlLCBDYWly
bzo6U2hhZG93U3RhdGU+IHsKKyAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKICAgICAgICAgdmlydHVhbCB+
RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5n
T3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAg
ICAgUGF0aCBwYXRoOwogICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigpKTsKLSAg
ICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0
aCwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCkBAIC00MTAsMTggKzQwNywxNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVX
aWR0aCkKIHsKLSAgICBzdHJ1Y3QgU3Ryb2tlUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgZmxvYXQsIENhaXJvOjpTdHJva2VTb3VyY2UsIENh
aXJvOjpTaGFkb3dTdGF0ZT4geworICAgIHN0cnVjdCBTdHJva2VSZWN0IGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdD4gewogICAgICAgICB2
aXJ0dWFsIH5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQ
YWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIENhaXJvOjpzdHJva2VSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSk7CisgICAgICAgICAgICBDYWly
bzo6c3Ryb2tlUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwx
PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKQEAgLTQzMCwxOCArNDI2LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCkpOwogfQogCiB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsK
LSAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4gewor
ICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8UGF0aD4gewogICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRoKCkgPSBkZWZhdWx0Owog
CiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIp
IG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAg
ICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBh
cmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCkBAIC00NTMsMjAgKzQ0OCwxOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1
Y3QgU3Ryb2tlRWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7Cisg
ICAgc3RydWN0IFN0cm9rZUVsbGlwc2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFJlY3Q+IHsKICAgICAgICAgdmlydHVhbCB+U3Ryb2tlRWxsaXBzZSgpID0g
ZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkm
IHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBQYXRoIHBhdGg7CiAg
ICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoYXJnPDA+KCkpOwotICAgICAgICAgICAgQ2Fpcm86
OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigpLCBh
cmc8Mj4oKSk7CisgICAgICAgICAgICBDYWlybzo6c3Ryb2tlUGF0aChjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgcGF0aCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCkBAIC00NzUsOCArNDY5LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTdHJva2VFbGxpcHNlPihyZWN0KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTUwMCwxMyArNDkzLDEy
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBzdHJ1
Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENh
aXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGUs
IEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3Rvcjxj
YWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgRmxvYXRT
aXplLCBDb2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKKyAgICBzdHJ1Y3QgRHJhd0dseXBocyBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIFJlZlB0
cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90PiwgZmxv
YXQsIEZvbnRTbW9vdGhpbmdNb2RlPiB7CiAgICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMoKSA9
IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdH
bHlwaHMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJn
PDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKS5nZXQoKSwKLSAgICAgICAgICAgICAgICBhcmc8NT4o
KSwgYXJnPDY+KCksIGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwgYXJn
PDExPigpLCBhcmc8MTI+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29udGV4
dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKS5nZXQoKSwgYXJnPDI+KCks
IGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAKICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtNTI4LDEyICs1MjAsOSBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaAogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAg
ICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LAorICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdHbHlwaHM+KHBvaW50LAogICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2Zv
bnRfdD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAotICAgICAgICBmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKSwgV1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHN0YXRl
LnRleHREcmF3aW5nTW9kZSwKLSAgICAgICAgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLCBmb250U21vb3RoaW5nKSk7CisgICAgICAg
IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9mZnNl
dCwgZm9udFNtb290aGluZykpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKQEAgLTU4NCwxMiArNTczLDEyIEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5h
dGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpCiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7
Ci0gICAgc3RydWN0IERyYXdSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ29sb3IsIFN0cm9rZVN0eWxlLCBDb2xvcj4geworICAg
IHN0cnVjdCBEcmF3UmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UmVjdCwgZmxvYXQ+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd1JlY3QoKSA9IGRlZmF1
bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdSZWN0KGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBh
cmc8Mz4oKSwgYXJnPDQ+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdSZWN0KGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtNTk4LDE4ICs1ODcs
MTcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCiB7Ci0gICAgc3RydWN0IERyYXdMaW5lIGZpbmFsIDogUGFpbnRpbmdP
cGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgRmxvYXRQb2ludCwgU3Ryb2tlU3R5
bGUsIENvbG9yLCBmbG9hdCwgYm9vbD4geworICAgIHN0cnVjdCBEcmF3TGluZSBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIEZsb2F0UG9pbnQ+IHsK
ICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmUoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAg
ICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCksIGFy
Zzw1PigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZShjb250ZXh0Rm9yUmVwbGF5KHJl
cGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTYyMSwxOCArNjA5LDE3IEBAIHZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9p
bnQxLCBwb2ludDIpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMs
IFN0cm9rZVN0eWxlKQogewotICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJh
eSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKKyAgICBzdHJ1Y3QgRHJhd0xpbmVzRm9yVGV4dCBmaW5h
bCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIGZsb2F0LCBE
YXNoQXJyYXksIGJvb2wsIGJvb2w+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4
dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6
ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CisgICAgICAg
ICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
YXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTY0
NCw4ICs2MzEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaQogICAgIGlmICh3aWR0aHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tl
Q29sb3IpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2lu
dCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKSk7CiB9CiAK
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQpAQCAt
NjY5LDEyICs2NTUsMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG8KIAogdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgc3RydWN0IERyYXdFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlv
bkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgU3Ryb2tlU3R5bGUsIENvbG9yLCBmbG9hdD4geworICAg
IHN0cnVjdCBEcmF3RWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UmVjdD4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3RWxsaXBzZSgpID0gZGVmYXVs
dDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxh
eWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+KCks
IGFyZzwzPigpLCBhcmc8ND4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0VsbGlwc2UoY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTY4Myw4ICs2NjksNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVj
dCkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434192</attachid>
            <date>2021-07-25 23:31:04 -0700</date>
            <delta_ts>2021-07-26 04:39:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227895-20210726153102.patch</filename>
            <type>text/plain</type>
            <size>61055</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMjg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU5YWQzYzA2YzU0YmNk
OWRmM2M0OGFmMTgzYTFjODliYTY4ZTdjMS4uNzIxZjlkZjUyNWU1NjExOTMwNTZlYmFiMDJiOGVh
YmM0N2FmZGY4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDIxLTA3LTI1ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFtDYWlyb10g
RG9uJ3QgcGFzcyB0aGUgY3VycmVudCBHcmFwaGljc0NvbnRleHQgc3RhdGUgdG8gQ2Fpcm9PcGVy
YXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
Mjc4OTUKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgwODE4ODQ3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIHIyNzk2NTggKEJ1ZyAyMjc3MjEpIGNo
YW5nZWQgQ2Fpcm9PcGVyYXRpb25zIHRvIHRha2UgYQorICAgICAgICBHcmFwaGljc0NvbnRleHRD
YWlybyBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIFNvLCBpdCdzIHJlZHVuZGFudCB0bworICAgICAg
ICB0YWtlIHRoZSBjdXJyZW50IHN0YXRlIGFzIHRoZSBhcmd1bWVudHMuCisKKyAgICAgICAgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6dXBkYXRlU3RhdGUgc2VuZHMgYSBjb21tYW5kIGZvciBhbGwK
KyAgICAgICAgcHJvcGVydGllcyB0byBzeW5jIHRoZSBzdGF0ZS4gVXNlIGNyb3NzVGhyZWFkQ29w
eSBmb3IgR3JhZGllbnQgYW5kCisgICAgICAgIFBhdHRlcm4gdG8gdHJhbnNmZXIgdGhlbSBjcm9z
cy10aHJlYWQuCisKKyAgICAgICAgQWRkZWQgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlIHNwZWNpYWxp
emF0aW9uIGZvciBHcmFkaWVudCwgUGF0dGVybiwKKyAgICAgICAgYW5kIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6Omlzb2xhdGVkQ29weSBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9OYXRpdmVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYXRpdmVJbWFnZTo6aXNv
bGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFn
ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGF0dGVybjo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpmaWxsUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnN0cm9rZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2Fpcm86OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJh
d0VsbGlwc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHA6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjp1cGRhdGVTdGF0ZSk6CisgICAg
ICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdCk6CisgICAgICAg
IChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBh
dGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlw
c2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVj
dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRo
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlw
c2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBo
cyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6
CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZSk6Cisg
ICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0
KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNl
KToKKwogMjAyMS0wNy0yNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW0FwcGxlIFBheV0gRG8gbm90IGFkZCBjb3Vwb24gY29kZSBgQXBwbGVQYXlFcnJvckNv
ZGVgIHZhbHVlcyBmb3Igc3lzdGVtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGl0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAKaW5kZXggOGViMzI2YzQ5NjRl
Y2E5ZTBmM2ZiYzdlMGNmODJiOGRhMzVmMzg5Yi4uMzQ2ZWRjMmY5MTQ5OTg1YzY5Njg5ODlkMjJl
ZThkMWQzYjQzNGU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmNwcApAQCAtMTY1LDQgKzE2NSwxNSBAQCB1bnNpZ25lZCBHcmFkaWVudDo6aGFzaCgp
IGNvbnN0CiAgICAgcmV0dXJuIG1fY2FjaGVkSGFzaDsKIH0KIAorI2lmIFVTRShOSUNPU0lBKQor
UmVmPEdyYWRpZW50PiBHcmFkaWVudDo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBhdXRv
IGNvcHkgPSBHcmFkaWVudDo6Y3JlYXRlKERhdGEgeyBtX2RhdGEgfSk7CisgICAgY29weS0+bV9z
dG9wcyA9IG1fc3RvcHM7CisgICAgY29weS0+bV9zdG9wc1NvcnRlZCA9IG1fc3RvcHNTb3J0ZWQ7
CisgICAgY29weS0+bV9zcHJlYWRNZXRob2QgPSBtX3NwcmVhZE1ldGhvZDsKKyAgICByZXR1cm4g
Y29weTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhZGllbnQuaAppbmRleCBmMjRlZGI2ZGVlNWFjOTk0YTE1N2FhNjY1MTBjM2IyNWUzZmZiMjRj
Li42NDQzOTUzZjU4NTgwMzNhZDFhZjdlMDczOGI5OWJlYTc3ZGY3M2E2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKQEAgLTEzNyw2ICsxMzcsMTAgQEAg
cHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3RkOjpv
cHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgUmVmPEdyYWRpZW50PiBpc29sYXRlZENvcHkoKSBjb25zdDsKKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIGV4cGxpY2l0IEdyYWRpZW50KERhdGEmJik7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmNwcAppbmRleCAwYTMxNTU4NTAz
NDk1ZTJkZTkzN2U3MjY5MzFlYzc4ODBjZjY5YTI3Li4xY2EzZjJhNzExZTM5MDU3MGRhODVlMDVi
ZWU5NmUyN2YyNDdjZDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9OYXRpdmVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTmF0aXZlSW1hZ2UuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKIAorI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENv
cGllci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00OSw0ICs1MCwxMSBAQCBOYXRpdmVJbWFnZTo6fk5hdGl2ZUltYWdlKCkKICAg
ICAgICAgb2JzZXJ2ZXItPnJlbGVhc2VOYXRpdmVJbWFnZShtX3JlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcik7CiB9CiAKKyNpZiBVU0UoTklDT1NJQSkKK1JlZlB0cjxOYXRpdmVJbWFnZT4gTmF0
aXZlSW1hZ2U6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNyZWF0ZShjcm9z
c1RocmVhZENvcHkobV9wbGF0Zm9ybUltYWdlKSwgbV9yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZS5oCmluZGV4IDk0NWI4ZGU5OGQ0Yjk4
OGNlZDlhMjY1ZDE2ZTU5NDAxMzFkMTM4MGMuLmI3NjNlMTY2OThjNTdhYTM3YTc0MTAwNDhkMWFl
YTUzYjA4OTBkYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L05hdGl2ZUltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0
aXZlSW1hZ2UuaApAQCAtNjUsNiArNjUsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xl
YXJTdWJpbWFnZXMoKTsKIAorI2lmIFVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxOYXRpdmVJbWFn
ZT4gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBOYXRpdmVJ
bWFnZShQbGF0Zm9ybUltYWdlUHRyJiYpOwogICAgIE5hdGl2ZUltYWdlKFBsYXRmb3JtSW1hZ2VQ
dHImJiwgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKaW5kZXggNjM1MzIzNzY5ZjgwMzNkZTMyOGU4ZDQ0
ZTU3OTc1YTFkM2NkNjA2NS4uNjgyNTg2ZWI4MjFiMmIxMmZhMzZhMjIyZGNiNTUxZDA3NDU3YmIw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKQEAg
LTQ5LDQgKzQ5LDE0IEBAIHZvaWQgUGF0dGVybjo6c2V0UGF0dGVyblNwYWNlVHJhbnNmb3JtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblNwYWNlVHJhbnNmCiAgICAgbV9wYXJhbWV0ZXJz
LnBhdHRlcm5TcGFjZVRyYW5zZm9ybSA9IHBhdHRlcm5TcGFjZVRyYW5zZm9ybTsKIH0KIAorI2lm
IFVTRShOSUNPU0lBKQorUmVmUHRyPFBhdHRlcm4+IFBhdHRlcm46Omlzb2xhdGVkQ29weSgpIGNv
bnN0Cit7CisgICAgYXV0byBpbWFnZSA9IHRpbGVJbWFnZSgpLmlzb2xhdGVkQ29weSgpOworICAg
IGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBjcmVhdGUo
aW1hZ2UucmVsZWFzZU5vbk51bGwoKSwgcGFyYW1ldGVycygpKTsKK30KKyNlbmRpZgorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKaW5kZXggMWM5NjFmYmY0
NmU4MzZmNDAwN2U2MGE5ODE0MWY0OTEyNGI1NDUwMy4uMDY1YzhmNDAzY2YxNGQ5NjJlYThlZTQ1
NjdlNTk3YWQ1OWY2NTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGF0dGVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bh
dHRlcm4uaApAQCAtODcsNiArODcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgcmVwZWF0WCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy5yZXBlYXRYOyB9CiAgICAgYm9vbCByZXBlYXRZKCkg
Y29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLnJlcGVhdFk7IH0KIAorI2lmIFVTRShOSUNPU0lB
KQorICAgIFJlZlB0cjxQYXR0ZXJuPiBpc29sYXRlZENvcHkoKSBjb25zdDsKKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIFBhdHRlcm4oUmVmPE5hdGl2ZUltYWdlPiYmLCBjb25zdCBQYXJhbWV0ZXJz
Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDIyNGE0NTI5MTJkNGUwNTNhYzYyNDBiZTFh
MWRhYjJkMzY0YzQwMzUuLmEzMzYxOWI1YTE3OTFjNzQyN2UyY2M4YWQ1NzJhZTUzYTNjODkwOWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
T3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtNjc4LDggKzY3OCwxNCBAQCB2b2lkIGZpbGxSZWN0
KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29ucwogICAgIGZpbGxDdXJyZW50Q2Fpcm9QYXRoKHBsYXRmb3JtQ29udGV4dCwgZmls
bFNvdXJjZSk7CiB9CiAKLXZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGNv
bnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKK3ZvaWQgZmlsbFJlY3QoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogeworICAg
IGZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2UocGxhdGZv
cm1Db250ZXh0LnN0YXRlKCkpLCBDYWlybzo6U2hhZG93U3RhdGUocGxhdGZvcm1Db250ZXh0LnN0
YXRlKCkpKTsKK30KKwordm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sK
KyAgICBDYWlybzo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUocGxhdGZvcm1Db250ZXh0LnN0YXRl
KCkpOwogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAgICAgICBTaGFkb3dC
bHVyIHNoYWRvdyh7IHNoYWRvd1N0YXRlLmJsdXIsIHNoYWRvd1N0YXRlLmJsdXIgfSwgc2hhZG93
U3RhdGUub2Zmc2V0LCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUuaWdub3JlVHJhbnNm
b3Jtcyk7CiAgICAgICAgIHNoYWRvdy5kcmF3UmVjdFNoYWRvdyhTdGF0ZTo6Z2V0Q1RNKHBsYXRm
b3JtQ29udGV4dCksIFN0YXRlOjpnZXRDbGlwQm91bmRzKHBsYXRmb3JtQ29udGV4dCksIEZsb2F0
Um91bmRlZFJlY3QocmVjdCksCkBAIC03MDksOCArNzE1LDkgQEAgdm9pZCBmaWxsUmVjdChHcmFw
aGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNhaXIKICAgICBjYWlyb19maWxsKGNyKTsKIH0KIAotdm9pZCBmaWxsUm91bmRlZFJlY3QoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3Rh
dGUpCit2b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7CisgICAgQ2Fpcm86OlNoYWRvd1N0YXRlIHNoYWRvd1N0YXRlKHBsYXRmb3JtQ29udGV4dC5z
dGF0ZSgpKTsKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgU2hh
ZG93Qmx1ciBzaGFkb3coeyBzaGFkb3dTdGF0ZS5ibHVyLCBzaGFkb3dTdGF0ZS5ibHVyIH0sIHNo
YWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0YXRlLmlnbm9yZVRy
YW5zZm9ybXMpOwogICAgICAgICBzaGFkb3cuZHJhd1JlY3RTaGFkb3coU3RhdGU6OmdldENUTShw
bGF0Zm9ybUNvbnRleHQpLCBTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQpLCBy
ZWN0LApAQCAtNzQwLDggKzc0NywxMSBAQCB2b2lkIGZpbGxSb3VuZGVkUmVjdChHcmFwaGljc0Nv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJvdW5kZWRSZQogICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKEdyYXBo
aWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBGaWxsU291cmNl
JiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCit2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0KQogeworICAgIEZpbGxTb3VyY2UgZmlsbFNvdXJjZShwbGF0Zm9ybUNvbnRleHQuc3Rh
dGUoKSk7CisgICAgU2hhZG93U3RhdGUgc2hhZG93U3RhdGUocGxhdGZvcm1Db250ZXh0LnN0YXRl
KCkpOworCiAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGxldmVyYWdlIHRoZSBzcGVjaWZpZWQg
Y29sb3IuCiAKICAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpIHsKQEAgLTc4NCw4ICs3
OTQsMTAgQEAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShHcmFwaGljc0NvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFIKICAgICBjYWlyb19yZXN0b3JlKGNyKTsK
IH0KIAotdm9pZCBmaWxsUGF0aChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBT
aGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCit2b2lkIGZpbGxQYXRoKEdyYXBoaWNzQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CisgICAgRmlsbFNvdXJj
ZSBmaWxsU291cmNlKHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpKTsKKyAgICBTaGFkb3dTdGF0ZSBz
aGFkb3dTdGF0ZShwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKSk7CiAgICAgY2Fpcm9fdCogY3IgPSBw
bGF0Zm9ybUNvbnRleHQuY3IoKTsKIAogICAgIHNldFBhdGhPbkNhaXJvQ29udGV4dChjciwgcGF0
aC5jYWlyb1BhdGgoKSk7CkBAIC03OTMsOCArODA1LDEwIEBAIHZvaWQgZmlsbFBhdGgoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3Qg
RmlsCiAgICAgZmlsbEN1cnJlbnRDYWlyb1BhdGgocGxhdGZvcm1Db250ZXh0LCBmaWxsU291cmNl
KTsKIH0KIAotdm9pZCBzdHJva2VSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoLCBjb25zdCBTdHJv
a2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQor
dm9pZCBzdHJva2VSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogeworICAgIFN0cm9rZVNvdXJj
ZSBzdHJva2VTb3VyY2UocGxhdGZvcm1Db250ZXh0LnN0YXRlKCkpOworICAgIFNoYWRvd1N0YXRl
IHNoYWRvd1N0YXRlKHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpKTsKICAgICBjYWlyb190KiBjciA9
IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIGNhaXJvX3NhdmUoY3IpOwogCkBAIC04MDcsOCAr
ODIxLDEwIEBAIHZvaWQgc3Ryb2tlUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1D
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7
CiB9CiAKLXZvaWQgc3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250
ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwg
Y29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQordm9pZCBzdHJva2VQYXRoKEdyYXBoaWNz
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgpCiB7CisgICAg
U3Ryb2tlU291cmNlIHN0cm9rZVNvdXJjZShwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKSk7CisgICAg
U2hhZG93U3RhdGUgc2hhZG93U3RhdGUocGxhdGZvcm1Db250ZXh0LnN0YXRlKCkpOwogICAgIGNh
aXJvX3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAKICAgICBzZXRQYXRoT25DYWlyb0Nv
bnRleHQoY3IsIHBhdGguY2Fpcm9QYXRoKCkpOwpAQCAtODI4LDkgKzg0NCwxNiBAQCB2b2lkIGNs
ZWFyUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGaWxsU291cmNl
JiBmaWxsU291cmNlLCBjb25zdCBTdHJva2VTb3VyY2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hh
ZG93U3RhdGUmIHNoYWRvd1N0YXRlLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdCogc2NhbGVkRm9udCwgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNvbnN0
IFZlY3RvcjxjYWlyb19nbHlwaF90PiYgZ2x5cGhzLCBmbG9hdCB4T2Zmc2V0LCBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgY29uc3Qg
RmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgRm9udFNt
b290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCit2b2lkIGRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNh
aXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQsIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBjb25zdCBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4mIGdseXBocywgZmxvYXQgeE9mZnNldCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgZHJhd0dseXBoc1NoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIHNoYWRvd1N0YXRlLCB0ZXh0RHJhd2luZ01vZGUsIHNoYWRvd09m
ZnNldCwgc2hhZG93Q29sb3IsIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBnbHlwaHMsIGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHBsYXRmb3Jt
Q29udGV4dC5zdGF0ZSgpOworICAgIEZpbGxTb3VyY2UgZmlsbFNvdXJjZShzdGF0ZSk7CisgICAg
U3Ryb2tlU291cmNlIHN0cm9rZVNvdXJjZShzdGF0ZSk7CisgICAgU2hhZG93U3RhdGUgc2hhZG93
U3RhdGUoc3RhdGUpOworICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSA9
IHN0YXRlLnRleHREcmF3aW5nTW9kZTsKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBzdGF0
ZS5zdHJva2VUaGlja25lc3M7CisKKyAgICBkcmF3R2x5cGhzU2hhZG93KHBsYXRmb3JtQ29udGV4
dCwgc2hhZG93U3RhdGUsIHRleHREcmF3aW5nTW9kZSwgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0
ZS5zaGFkb3dDb2xvciwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGds
eXBocywgZm9udFNtb290aGluZ01vZGUpOwogCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNv
bnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKQEAgLTk4MSwxOCArMTAwNCwyMCBAQCB2
b2lkIGRyYXdTdXJmYWNlKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNh
aXJvX3N1cmZhY2VfdCogc3VyZmFjZQogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCi12b2lk
IGRyYXdSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzLCBjb25zdCBDb2xvciYgZmlsbENv
bG9yLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKQor
dm9pZCBkcmF3UmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKKyAgICBhdXRvJiBz
dGF0ZSA9IHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpOworCiAgICAgLy8gRklYTUU6IGhvdyBzaG91
bGQgYm9yZGVyVGhpY2tuZXNzIGJlIHVzZWQ/CiAgICAgVU5VU0VEX1BBUkFNKGJvcmRlclRoaWNr
bmVzcyk7CiAKICAgICBjYWlyb190KiBjciA9IHBsYXRmb3JtQ29udGV4dC5jcigpOwogICAgIGNh
aXJvX3NhdmUoY3IpOwogCi0gICAgZmlsbFJlY3RXaXRoQ29sb3IoY3IsIHJlY3QsIGZpbGxDb2xv
cik7CisgICAgZmlsbFJlY3RXaXRoQ29sb3IoY3IsIHJlY3QsIHN0YXRlLmZpbGxDb2xvcik7CiAK
LSAgICBpZiAoc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgc2V0U291cmNlUkdC
QUZyb21Db2xvcihjciwgc3Ryb2tlQ29sb3IpOworICAgIGlmIChzdGF0ZS5zdHJva2VTdHlsZSAh
PSBOb1N0cm9rZSkgeworICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdGF0ZS5z
dHJva2VDb2xvcik7CiAgICAgICAgIEZsb2F0UmVjdCByKHJlY3QpOwogICAgICAgICByLmluZmxh
dGUoLS41Zik7CiAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIueSgpLCByLndp
ZHRoKCksIHIuaGVpZ2h0KCkpOwpAQCAtMTAwMyw4ICsxMDI4LDEyIEBAIHZvaWQgZHJhd1JlY3Qo
R3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hCiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgZHJhd0xpbmUoR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlLCBj
b25zdCBDb2xvciYgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgYm9vbCBzaG91
bGRBbnRpYWxpYXMpCit2b2lkIGRyYXdMaW5lKEdyYXBoaWNzQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQogeworICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlID0gcGxhdGZvcm1Db250ZXh0LnN0
YXRlKCkuc3Ryb2tlU3R5bGU7CisgICAgQ29sb3Igc3Ryb2tlQ29sb3IgPSBwbGF0Zm9ybUNvbnRl
eHQuc3RhdGUoKS5zdHJva2VDb2xvcjsKKyAgICBmbG9hdCBzdHJva2VUaGlja25lc3MgPSBwbGF0
Zm9ybUNvbnRleHQuc3RhdGUoKS5zdHJva2VUaGlja25lc3M7CisgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXMgPSBwbGF0Zm9ybUNvbnRleHQuc3RhdGUoKS5zaG91bGRBbnRpYWxpYXM7CiAgICAgYm9v
bCBpc1ZlcnRpY2FsTGluZSA9IChwb2ludDEueCgpICsgc3Ryb2tlVGhpY2tuZXNzID09IHBvaW50
Mi54KCkpOwogICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gaXNWZXJ0aWNhbExpbmUgPyBwb2ludDIu
eSgpIC0gcG9pbnQxLnkoKSA6IHBvaW50Mi54KCkgLSBwb2ludDEueCgpOwogICAgIGlmICghc3Ry
b2tlVGhpY2tuZXNzIHx8ICFzdHJva2VXaWR0aCkKQEAgLTEwNjAsOSArMTA4OSw5IEBAIHZvaWQg
ZHJhd0xpbmUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjCiAgICAgICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY2Fpcm9Db250
ZXh0LCBDQUlST19BTlRJQUxJQVNfREVGQVVMVCk7CiB9CiAKLXZvaWQgZHJhd0xpbmVzRm9yVGV4
dChHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBjb25zdCBDb2xvciYgY29sb3Ip
Cit2b2lkIGRyYXdMaW5lc0ZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHN0cm9rZVRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cykKIHsKLSAgICBDb2xvciBtb2RpZmllZENvbG9yID0gY29sb3I7CisgICAgQ29sb3IgbW9kaWZp
ZWRDb2xvciA9IHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpLnN0cm9rZUNvbG9yOwogICAgIEZsb2F0
UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KHBsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHdpZHRocy5sYXN0KCksIHByaW50aW5nLCBtb2RpZmll
ZENvbG9yLCBzdHJva2VUaGlja25lc3MpOwogCiAgICAgVmVjdG9yPEZsb2F0UmVjdCwgND4gZGFz
aEJvdW5kczsKQEAgLTExMDQsOCArMTEzMyw5IEBAIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihHcmFwaGljc0NvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hCiAg
ICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXZvaWQgZHJhd0VsbGlwc2UoR3JhcGhpY3NDb250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgZmlsbENvbG9yLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImIHN0
cm9rZUNvbG9yLCBmbG9hdCBzdHJva2VUaGlja25lc3MpCit2b2lkIGRyYXdFbGxpcHNlKEdyYXBo
aWNzQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKKyAgICBhdXRvJiBzdGF0ZSA9IHBsYXRmb3JtQ29udGV4dC5zdGF0ZSgpOwogICAgIGNhaXJv
X3QqIGNyID0gcGxhdGZvcm1Db250ZXh0LmNyKCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKQEAg
LTExMTYsMTQgKzExNDYsMTQgQEAgdm9pZCBkcmF3RWxsaXBzZShHcmFwaGljc0NvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGMKICAgICBjYWlyb19h
cmMoY3IsIDAuLCAwLiwgMS4sIDAuLCAyICogcGlGbG9hdCk7CiAgICAgY2Fpcm9fcmVzdG9yZShj
cik7CiAKLSAgICBpZiAoZmlsbENvbG9yLmlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIHNldFNvdXJj
ZVJHQkFGcm9tQ29sb3IoY3IsIGZpbGxDb2xvcik7CisgICAgaWYgKHN0YXRlLmZpbGxDb2xvci5p
c1Zpc2libGUoKSkgeworICAgICAgICBzZXRTb3VyY2VSR0JBRnJvbUNvbG9yKGNyLCBzdGF0ZS5m
aWxsQ29sb3IpOwogICAgICAgICBjYWlyb19maWxsX3ByZXNlcnZlKGNyKTsKICAgICB9CiAKLSAg
ICBpZiAoc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgc2V0U291cmNlUkdCQUZy
b21Db2xvcihjciwgc3Ryb2tlQ29sb3IpOwotICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChj
ciwgc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBpZiAoc3RhdGUuc3Ryb2tlU3R5bGUgIT0gTm9TdHJv
a2UpIHsKKyAgICAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgc3RhdGUuc3Ryb2tlQ29s
b3IpOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKTsKICAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKICAgICB9IGVsc2UKICAgICAgICAgY2Fp
cm9fbmV3X3BhdGgoY3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAppbmRleCA1NDk4NTYzY2U0OWMxNWUzNWQw
ODI1OWMyZDI2ZGM3YjE3Y2VhODg1Li43MzUyNzUyODMzNDNjYmE1NGIxZjhjYThiYzAwMjNjNGVm
ZjIxN2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9DYWlyb09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaApAQCAtMTMxLDI2ICsxMzEsMjcgQEAgdm9pZCBzZXRM
aW5lSm9pbihHcmFwaGljc0NvbnRleHRDYWlybyYsIExpbmVKb2luKTsKIHZvaWQgc2V0TWl0ZXJM
aW1pdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGZsb2F0KTsKIAogdm9pZCBmaWxsUmVjdChHcmFw
aGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZpbGxTb3VyY2UmLCBj
b25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKK3Zv
aWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKK3Zv
aWQgZmlsbFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpOwogdm9pZCBmaWxsUmVjdChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNhaXJvX3BhdHRlcm5fdCopOwotdm9pZCBmaWxsUm91bmRlZFJlY3QoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBj
b25zdCBTaGFkb3dTdGF0ZSYpOwotdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShHcmFwaGlj
c0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBGaWxsU291cmNlJiwgY29uc3QgU2hhZG93U3RhdGUmKTsKLXZvaWQgZmlsbFBhdGgo
R3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBQYXRoJiwgY29uc3QgRmlsbFNvdXJjZSYsIGNv
bnN0IFNoYWRvd1N0YXRlJik7Ci12b2lkIHN0cm9rZVJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hh
ZG93U3RhdGUmKTsKLXZvaWQgc3Ryb2tlUGF0aChHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0
IFBhdGgmLCBjb25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwordm9pZCBm
aWxsUm91bmRlZFJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImKTsKK3ZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
Jik7Cit2b2lkIGZpbGxQYXRoKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgUGF0aCYpOwor
dm9pZCBzdHJva2VSZWN0KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpOwordm9pZCBzdHJva2VQYXRoKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgUGF0
aCYpOwogdm9pZCBjbGVhclJlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJl
Y3QmKTsKIAotdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmls
bFNvdXJjZSYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0YXRlJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGNhaXJvX3NjYWxlZF9mb250X3QqLCBkb3VibGUsIGNvbnN0IFZlY3Rvcjxj
YWlyb19nbHlwaF90PiYsIGZsb2F0LCBUZXh0RHJhd2luZ01vZGVGbGFncywgZmxvYXQsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IENvbG9yJiwgRm9udFNtb290aGluZ01vZGUpOwordm9pZCBkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgRmxvYXRQb2ludCYsIGNhaXJvX3Nj
YWxlZF9mb250X3QqLCBkb3VibGUsIGNvbnN0IFZlY3RvcjxjYWlyb19nbHlwaF90PiYsIGZsb2F0
LCBGb250U21vb3RoaW5nTW9kZSk7CiAKIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoR3JhcGhpY3ND
b250ZXh0Q2Fpcm8mLCBjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYsIGZsb2F0LCBjb25zdCBTaGFk
b3dTdGF0ZSYpOwogdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHRDYWlybyYsIGNhaXJv
X3N1cmZhY2VfdCosIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd1N1cmZhY2Uo
R3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBJbnRlcnBvbGF0aW9uUXVhbGl0eSwgZmxvYXQsIGNvbnN0IFNo
YWRvd1N0YXRlJiwgT3JpZW50YXRpb25TaXppbmcgb3BlcmF0aW9uU2l6aW5nID0gT3JpZW50YXRp
b25TaXppbmc6Ok5vcm1hbCk7CiAKLXZvaWQgZHJhd1JlY3QoR3JhcGhpY3NDb250ZXh0Q2Fpcm8m
LCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgY29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29u
c3QgQ29sb3ImKTsKLXZvaWQgZHJhd0xpbmUoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYs
IGZsb2F0LCBib29sKTsKLXZvaWQgZHJhd0xpbmVzRm9yVGV4dChHcmFwaGljc0NvbnRleHRDYWly
byYsIGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYs
IGJvb2wsIGJvb2wsIGNvbnN0IENvbG9yJik7Cit2b2lkIGRyYXdSZWN0KEdyYXBoaWNzQ29udGV4
dENhaXJvJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpOwordm9pZCBkcmF3TGluZShHcmFwaGlj
c0NvbnRleHRDYWlybyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7Cit2
b2lkIGRyYXdMaW5lc0ZvclRleHQoR3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKTsKIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHRDYWlybyYsIGNvbnN0
IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKLXZvaWQgZHJhd0VsbGlwc2Uo
R3JhcGhpY3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIFN0
cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0KTsKK3ZvaWQgZHJhd0VsbGlwc2UoR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8mLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogdm9pZCBkcmF3Rm9jdXNSaW5n
KEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgUGF0aCYsIGZsb2F0LCBjb25zdCBDb2xvciYp
Owogdm9pZCBkcmF3Rm9jdXNSaW5nKEdyYXBoaWNzQ29udGV4dENhaXJvJiwgY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCwgY29uc3QgQ29sb3ImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCmluZGV4IGE3YWYwY2Vi
NTI0OTA0MDQxZWUxMmQ1MWY4OWM2ZGYxNmNiMzYwMzcuLjA1ZDU4NDUzYzE0ZDY4OWZlMGFhMjYw
NjZlZmJkYTI2MTE3M2ZhNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcApAQCAtNjksMTEgKzY5LDcgQEAgdm9pZCBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEcKICAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3lu
dGhldGljQm9sZE9mZnNldCgpOwogCiAgICAgQVNTRVJUKGNvbnRleHQuaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIGF1dG8mIHN0YXRlID0gY29udGV4dC5zdGF0ZSgpOwotICAgIENhaXJvOjpk
cmF3R2x5cGhzKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAotICAgICAgICBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgY2Fp
cm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAot
ICAgICAgICBmb250U21vb3RoaW5nTW9kZSk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKmNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zm
c2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiBQYXRo
IEZvbnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGM1Yjk3NDkyZmFjYjY1MTNmNjQyNTY2YjhjNGZlZDE0
MjM5Mzg2ZDAuLjJiYjI2MzE1ZDQ5OWE0YTVjNWY1OWVhMWYwNjY4ZmMyM2YwNWI1NTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTEzOCw4ICsxMzgsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewog
ICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QoKnRoaXMsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwor
ICAgIENhaXJvOjpkcmF3UmVjdCgqdGhpcywgcmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBu
YXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKQEAgLTE1NCwxNSArMTUzLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYKICAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSgqdGhpcywgcG9p
bnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworICAgIENhaXJvOjpkcmF3
TGluZSgqdGhpcywgcG9pbnQxLCBwb2ludDIpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5
IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KIHZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNl
KCp0aGlzLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBDYWlybzo6ZHJhd0VsbGlw
c2UoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMTcwLDggKzE2Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKCp0aGlzLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpmaWxsUGF0aCgqdGhp
cywgcGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKQEAgLTE3OSwxOSArMTc1LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBDYWlybzo6c3Ryb2tlUGF0aCgqdGhpcywgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpzdHJva2VQYXRo
KCp0aGlzLCBwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KCp0
aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86OmZp
bGxSZWN0KCp0aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsK
KyAgICBDYWlybzo6ZmlsbFJlY3QoKnRoaXMsIHJlY3QsIGNvbG9yKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCkBAIC0yMTIsNyArMjA2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEMK
ICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRl
T3BlcmF0b3I7CiAKICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqdGhp
cywgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCp0
aGlzLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86
OmZpbGxSZWN0KCp0aGlzLCByZWN0LCBjb2xvcik7CiAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21w
b3NpdGVPcGVyYXRpb24oKnRoaXMsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFs
KTsKIH0KIApAQCAtMjY1LDcgKzI1OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrCiB7CiAg
ICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dCgqdGhpcywgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7CisgICAgQ2Fpcm86OmRyYXdM
aW5lc0ZvclRleHQoKnRoaXMsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRv
dWJsZVVuZGVybGluZXMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCkBAIC0zMzcsOCArMzMxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVX
aWR0aCkKIHsKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0
cm9rZVJlY3QoKnRoaXMsIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpzdHJva2VSZWN0KCp0
aGlzLCByZWN0LCBsaW5lV2lkdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKQEAgLTM4Myw3ICszNzYsNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQ2Fpcm86OmZpbGxSb3Vu
ZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7
CisgICAgQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdCgqdGhpcywgcmVjdCwgY29sb3IpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMzkxLDggKzM4NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QKICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSgqdGhpcywgcmVjdCwgcm91bmRlZEhvbGVSZWN0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTQzMSwxMSArNDIz
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKgogICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxp
YXNpbmcoKSkKICAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Nt
b290aGluZzsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6
ZHJhd0dseXBocygqdGhpcywgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQs
IHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAot
ICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAgZm9udFNtb290aGlu
Zyk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMoKnRoaXMsIHBvaW50LCBzY2FsZWRGb250LCBzeW50
aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwgZm9udFNtb290aGluZyk7CiB9
CiAKIGNhaXJvX3QqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjcigpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAppbmRl
eCA2M2ZhNmFhYjlkM2QzNzZiNmRmMDRiNWVmYmRjZjJlY2E4ZTQ4ZDk1Li5hYTQwYWQ3ZWEyYTJl
N2Y3Y2NkNTU4MmFhMmQwMGRiYjA4NDhmMzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKQEAgLTI0LDYgKzI0LDEwIEBA
CiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRl
IDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBfY2Fp
cm8gY2Fpcm9fdDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1cmZhY2Vf
dDsKIHR5cGVkZWYgc3RydWN0IF9jYWlyb19mb250X2ZhY2UgY2Fpcm9fZm9udF9mYWNlX3Q7CkBA
IC02OSw2ICs3MywxNiBAQCBzdHJ1Y3QgRGVmYXVsdFJlZkRlcmVmVHJhaXRzPGNhaXJvX3JlZ2lv
bl90PiB7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZJZk5vdE51bGwoY2Fpcm9fcmVnaW9uX3QqKTsK
IH07CiAKKworI2lmIFVTRShOSUNPU0lBKQordGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRD
b3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weShV
JiYgc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNvdXJjZTsKKyAgICB9Cit9OworI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApp
bmRleCA3MjViNmY1MjgyMDhhMTQwM2I2NjExOTMwM2U1NTAyZTM3MzZkMzZkLi4zZTdiOTIzNWQ1
NzZhMDAyZTA4MzkzNmY2NjFmMDNjOGE0NjI2Y2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmljb3NpYVBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5Q2Fpcm8uaCIKICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyNpbmNsdWRlIDx3
dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKQEAgLTg0LDEzICs4NSw4NSBA
QCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5n
T3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKKyAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpIHsKKyAgICAgICAgc3Ry
dWN0IFN0cm9rZUdyYWRpZW50Q2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8UmVmUHRyPEdyYWRpZW50Pj4geworICAgICAgICAgICAgdmlydHVhbCB+U3Ryb2tl
R3JhZGllbnRDaGFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQ
YWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2V0U3Ryb2tlR3Jh
ZGllbnQoYXJnPDA+KCkuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VHcmFkaWVu
dENoYW5nZTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFN0cm9rZUdyYWRpZW50Q2hhbmdlPihtYWtlUmVmUHRyKGNyb3NzVGhy
ZWFkQ29weSgqc3RhdGUuc3Ryb2tlR3JhZGllbnQpLnB0cigpKSkpOworICAgIH0KKworICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKSB7Cisg
ICAgICAgIHN0cnVjdCBTdHJva2VQYXR0ZXJuQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8UmVmUHRyPFBhdHRlcm4+PiB7CisgICAgICAgICAgICB2aXJ0dWFs
IH5TdHJva2VQYXR0ZXJuQ2hhbmdlKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNldFN0
cm9rZVBhdHRlcm4oYXJnPDA+KCkuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJTdHJva2VQ
YXR0ZXJuQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0dGVybkNoYW5nZT4oY3Jvc3NUaHJlYWRDb3B5
KCpzdGF0ZS5zdHJva2VQYXR0ZXJuKSkpOworICAgIH0KKworICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IEZp
bGxHcmFkaWVudENoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PFJlZlB0cjxHcmFkaWVudD4+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgfkZpbGxHcmFkaWVudENo
YW5nZSgpID0gZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3Bl
cmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zZXRGaWxsR3JhZGllbnQoYXJnPDA+
KCkuY29weVJlZigpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgdHMgPDwgaW5kZW50IDw8ICJGaWxsR3JhZGllbnRDaGFuZ2U8PlxuIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxGaWxsR3JhZGllbnRDaGFuZ2U+KG1ha2VSZWZQdHIoY3Jvc3NUaHJlYWRDb3B5KCpzdGF0ZS5m
aWxsR3JhZGllbnQpLnB0cigpKSkpOworICAgIH0KKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSkgeworICAgICAgICBzdHJ1Y3QgRmlsbFBh
dHRlcm5DaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxSZWZQ
dHI8UGF0dGVybj4+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgfkZpbGxQYXR0ZXJuQ2hhbmdlKCkg
PSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNldEZpbGxQYXR0ZXJuKGFyZzwwPigpLmNvcHlS
ZWYoKS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9p
ZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFBhdHRlcm5DaGFuZ2U8PlxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0
dGVybkNoYW5nZT4oY3Jvc3NUaHJlYWRDb3B5KCpzdGF0ZS5maWxsUGF0dGVybikpKTsKKyAgICB9
CisKICAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKSB7CiAgICAgICAgIHN0cnVjdCBTdHJva2VUaGlja25lc3NDaGFuZ2UgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxmbG9hdD4gewogICAgICAgICAgICAgdmly
dHVhbCB+U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKCkgPSBkZWZhdWx0OwogCiAgICAgICAgICAgICB2
b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhp
Y2tuZXNzKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSk7CisgICAgICAgICAg
ICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2V0U3Ryb2tlVGhpY2tuZXNzKGFyZzww
PigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
IHRzKSBvdmVycmlkZQpAQCAtMTAyLDEzICsxNzUsMzIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdy
YXAKICAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlPihz
dGF0ZS5zdHJva2VUaGlja25lc3MpKTsKICAgICB9CiAKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IFN0cm9r
ZUNvbG9yQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8Q29s
b3I+IHsKKyAgICAgICAgICAgIHZpcnR1YWwgflN0cm9rZUNvbG9yQ2hhbmdlKCkgPSBkZWZhdWx0
OworCisgICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHRG
b3JSZXBsYXkocmVwbGF5ZXIpLnNldFN0cm9rZUNvbG9yKGFyZzwwPigpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiU3Ryb2tlQ29sb3JD
aGFuZ2U8PlxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxTdHJva2VDb2xvckNoYW5nZT4oc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAg
ICB9CisKKwogICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHls
ZUNoYW5nZSkgewogICAgICAgICBzdHJ1Y3QgU3Ryb2tlU3R5bGVDaGFuZ2UgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxTdHJva2VTdHlsZT4gewogICAgICAgICAgICAg
dmlydHVhbCB+U3Ryb2tlU3R5bGVDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHls
ZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOworICAgICAgICAgICAgICAg
IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNldFN0cm9rZVN0eWxlKGFyZzwwPigpKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVy
cmlkZQpAQCAtMTIwLDEzICsyMTIsMTA0IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwCiAgICAg
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVN0eWxlQ2hhbmdlPihzdGF0ZS5zdHJva2VT
dHlsZSkpOwogICAgIH0KIAorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpG
aWxsQ29sb3JDaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IEZpbGxDb2xvckNoYW5nZSBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPENvbG9yPiB7CisgICAgICAgICAgICB2
aXJ0dWFsIH5GaWxsQ29sb3JDaGFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQg
ZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2V0
RmlsbENvbG9yKGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbENvbG9yQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICB9
CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbENvbG9yQ2hh
bmdlPihzdGF0ZS5maWxsQ29sb3IpKTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IEZpbGxSdWxl
Q2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8V2luZFJ1bGU+
IHsKKyAgICAgICAgICAgIHZpcnR1YWwgfkZpbGxSdWxlQ2hhbmdlKCkgPSBkZWZhdWx0OworCisg
ICAgICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVy
KSBvdmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHRGb3JSZXBs
YXkocmVwbGF5ZXIpLnNldEZpbGxSdWxlKGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiRmlsbFJ1bGVDaGFuZ2U8PlxuIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxGaWxsUnVsZUNoYW5nZT4oc3RhdGUuZmlsbFJ1bGUpKTsKKyAgICB9CisKKyAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAgICAgIHN0cnVj
dCBTaGFkb3dDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxG
bG9hdFNpemUsIGZsb2F0LCBDb2xvciwgU2hhZG93UmFkaXVzTW9kZT4geworICAgICAgICAgICAg
dmlydHVhbCB+U2hhZG93Q2hhbmdlKCkgPSBkZWZhdWx0OworCisgICAgICAgICAgICB2b2lkIGV4
ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLnNldFNo
YWRvdyhhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIlNoYWRvd0NoYW5n
ZTw+XG4iOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFNoYWRvd0NoYW5nZT4oc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dC
bHVyLCBzdGF0ZS5zaGFkb3dDb2xvciwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZSkpOworICAgIH0K
KworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtc0NoYW5nZSkgeworICAgICAgICBzdHJ1Y3QgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXND
aGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7Cisg
ICAgICAgICAgICB2aXJ0dWFsIH5TaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSgpID0gZGVm
YXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhhcmc8MD4o
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0
cykgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQg
PDwgIlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXNDaGFuZ2U+KHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSk7CisgICAgfQor
CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSB7Cisg
ICAgICAgIHN0cnVjdCBBbHBoYUNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPGZsb2F0PiB7CisgICAgICAgICAgICB2aXJ0dWFsIH5BbHBoYUNoYW5nZSgpID0g
ZGVmYXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zZXRBbHBoYShhcmc8MD4oKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkFscGhhQ2hhbmdl
PD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8QWxwaGFDaGFuZ2U+KHN0YXRlLmFscGhhKSk7CisgICAgfQorCisKICAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKSB7
CiAgICAgICAgIHN0cnVjdCBDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlPiB7
CiAgICAgICAgICAgICB2aXJ0dWFsIH5Db21wb3NpdGVPcGVyYXRpb25DaGFuZ2UoKSA9IGRlZmF1
bHQ7CiAKICAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYg
cmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oY29udGV4dEZvclJlcGxheShyZXBsYXllciks
IGFyZzwwPigpLCBhcmc8MT4oKSk7CisgICAgICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShy
ZXBsYXllcikuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGFyZzwwPigpLCBhcmc8MT4oKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKQEAgLTEzOCwxMyArMzIxLDMxIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6dXBk
YXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwCiAgICAgICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPENvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZT4oc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSkpOwogICAgIH0KIAorICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpIHsKKyAgICAg
ICAgc3RydWN0IFRleHREcmF3aW5nTW9kZUNoYW5nZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPFRleHREcmF3aW5nTW9kZUZsYWdzPiB7CisgICAgICAgICAgICB2aXJ0
dWFsIH5UZXh0RHJhd2luZ01vZGVDaGFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllciku
c2V0VGV4dERyYXdpbmdNb2RlKGFyZzwwPigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAiVGV4dERyYXdpbmdNb2RlQ2hhbmdlPD5cbiI7
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8VGV4dERyYXdpbmdNb2RlQ2hhbmdlPihzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKyAgICB9
CisKICAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFz
Q2hhbmdlKSB7CiAgICAgICAgIHN0cnVjdCBTaG91bGRBbnRpYWxpYXNDaGFuZ2UgZmluYWwgOiBQ
YWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7CiAgICAgICAgICAgICB2aXJ0
dWFsIH5TaG91bGRBbnRpYWxpYXNDaGFuZ2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgICAgIHZv
aWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zZXRTaG91bGRBbnRpYWxpYXMoYXJnPDA+
KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCkBAIC0xNTUsNiArMzU2LDc5IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
CiAKICAgICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U2hvdWxkQW50aWFsaWFzQ2hhbmdlPihz
dGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKICAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpIHsKKyAgICAgICAgc3RydWN0
IFNob3VsZFNtb290aEZvbnRzQ2hhbmdlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8Ym9vbD4geworICAgICAgICAgICAgdmlydHVhbCB+U2hvdWxkU21vb3RoRm9udHND
aGFuZ2UoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09w
ZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29udGV4dEZvclJlcGxheShyZXBsYXllcikuc2V0U2hvdWxkU21vb3RoRm9udHMo
YXJnPDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwg
aW5kZW50IDw8ICJTaG91bGRTbW9vdGhGb250c0NoYW5nZTw+XG4iOworICAgICAgICAgICAgfQor
ICAgICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFNob3VsZFNtb290aEZv
bnRzQ2hhbmdlPihzdGF0ZS5zaG91bGRTbW9vdGhGb250cykpOworICAgIH0KKworICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHND
aGFuZ2UpIHsKKyAgICAgICAgc3RydWN0IFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5n
ZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPGJvb2w+IHsKKyAgICAg
ICAgICAgIHZpcnR1YWwgflNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSgpID0gZGVm
YXVsdDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5
JiByZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKS5zZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYXJn
PDA+KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYgdHMpIG92ZXJyaWRlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHMgPDwgaW5k
ZW50IDw8ICJTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2U8PlxuIjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2U+KHN0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cykpOworICAgIH0KKworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpE
cmF3THVtaW5hbmNlTWFza0NoYW5nZSkgeworICAgICAgICBzdHJ1Y3QgRHJhd0x1bWluYW5jZU1h
c2tDaGFuZ2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxib29sPiB7
CisgICAgICAgICAgICB2aXJ0dWFsIH5EcmF3THVtaW5hbmNlTWFza0NoYW5nZSgpID0gZGVmYXVs
dDsKKworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
Rm9yUmVwbGF5KHJlcGxheWVyKS5zZXREcmF3THVtaW5hbmNlTWFzayhhcmc8MD4oKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJp
ZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cyA8PCBpbmRlbnQgPDwgIkRyYXdM
dW1pbmFuY2VNYXNrQ2hhbmdlPD5cbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2U+KHN0YXRl
LmRyYXdMdW1pbmFuY2VNYXNrKSk7CisgICAgfQorCisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpIHsKKyAgICAgICAg
c3RydWN0IEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxJbnRlcnBvbGF0aW9uUXVhbGl0eT4geworICAgICAgICAg
ICAgdmlydHVhbCB+SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSgpID0gZGVmYXVsdDsK
KworICAgICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBs
YXllcikgb3ZlcnJpZGUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0Rm9y
UmVwbGF5KHJlcGxheWVyKS5zZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGFyZzwwPigpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBv
dmVycmlkZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRzIDw8IGluZGVudCA8PCAi
SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZTw+XG4iOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2U+KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKyAgICB9
CisKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAg
bGluZUNhcCkKQEAgLTIzNSwxMiArNTA5LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQogCiB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3Qg
RmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJl
Y3QsIENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICBzdHJ1Y3Qg
RmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJl
Y3Q+IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJlY3QoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAg
dm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUK
ICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KGNvbnRleHRGb3JSZXBsYXko
cmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENh
aXJvOjpmaWxsUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAt
MjQ5LDE4ICs1MjMsMTcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0Pihy
ZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
KTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCkpOwogfQogCiB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBhaW50
aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29sb3IsIENhaXJvOjpTaGFk
b3dTdGF0ZT4geworICAgIHN0cnVjdCBGaWxsUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgQ29sb3I+IHsKICAgICAgICAgdmlydHVhbCB+Rmls
bFJlY3QoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0
aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fp
cm86OmZpbGxSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+
KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdChjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTI2OSw3ICs1NDIsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9y
KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCkBAIC0yOTcsMTYgKzU3MCwxNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgR3JhZGllbnQmIGdyYWRpZW50KQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAg
ICBzdHJ1Y3QgRmlsbFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFJlY3QsIENvbG9yLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBDYWlybzo6
U2hhZG93U3RhdGUsIENvbXBvc2l0ZU9wZXJhdG9yPiB7CisgICAgc3RydWN0IEZpbGxSZWN0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBDb2xvciwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZT4gewogICAgICAgICB2aXJ0dWFsIH5GaWxsUmVj
dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25S
ZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBhdXRvJiBw
bGF0Zm9ybUNvbnRleHQgPSBjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKTsKKyAgICAgICAgICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBwbGF0Zm9ybUNvbnRleHQuY29t
cG9zaXRlT3BlcmF0aW9uKCk7CiAKICAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIGFyZzwzPigpKTsKLSAgICAg
ICAgICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIGFyZzwwPigpLCBhcmc8MT4o
KSwgYXJnPDQ+KCkpOwotICAgICAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24ocGxhdGZvcm1Db250ZXh0LCBhcmc8NT4oKSwgQmxlbmRNb2RlOjpOb3JtYWwpOworICAg
ICAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCwgYXJnPDA+KCksIGFyZzwx
PigpKTsKKyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBs
YXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwogICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAt
MzE1LDI4ICs1ODksMjcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRN
b2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikp
OworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgY29tcG9z
aXRlT3BlcmF0b3IsIGJsZW5kTW9kZSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIHN0cnVjdCBG
aWxsUm91bmRlZFJlY3QgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxG
bG9hdFJvdW5kZWRSZWN0LCBDb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7CisgICAgc3RydWN0IEZpbGxSb3VuZGVkUmVjdCBmaW5hbCA6IFBh
aW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0Um91bmRlZFJlY3QsIENvbG9yLCBC
bGVuZE1vZGU+IHsKICAgICAgICAgdmlydHVhbCB+RmlsbFJvdW5kZWRSZWN0KCkgPSBkZWZhdWx0
OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGF1dG8mIHBsYXRmb3JtQ29udGV4
dCA9IGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpOwogCi0gICAgICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihwbGF0Zm9ybUNvbnRleHQsIGFyZzwyPigpLCBhcmc8
Mz4oKSk7CisgICAgICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihw
bGF0Zm9ybUNvbnRleHQsIHBsYXRmb3JtQ29udGV4dC5jb21wb3NpdGVPcGVyYXRpb24oKSwgYXJn
PDI+KCkpOwogCiAgICAgICAgICAgICBhdXRvJiByZWN0ID0gYXJnPDA+KCk7CiAgICAgICAgICAg
ICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgICAgICAgICBDYWlybzo6ZmlsbFJvdW5k
ZWRSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgYXJnPDE+KCksIGFyZzw0PigpKTsKKyAgICAg
ICAgICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwg
YXJnPDE+KCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENhaXJvOjpmaWxs
UmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBhcmc8MT4oKSwgYXJnPDQ+KCkpOwor
ICAgICAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVj
dCgpLCBhcmc8MT4oKSk7CiAKLSAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKHBsYXRmb3JtQ29udGV4dCwgYXJnPDI+KCksIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
KyAgICAgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKHBsYXRmb3Jt
Q29udGV4dCwgcGxhdGZvcm1Db250ZXh0LmNvbXBvc2l0ZU9wZXJhdGlvbigpLCBCbGVuZE1vZGU6
Ok5vcm1hbCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMp
IG92ZXJyaWRlCkBAIC0zNDUsMTggKzYxOCwxNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+KHJvdW5kZWRSZWN0LCBjb2xv
ciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91
bmRlZFJlY3QsIGNvbG9yLCBibGVuZE1vZGUpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIHN0cnVjdCBGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSBmaW5hbCA6IFBhaW50aW5n
T3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgRmxvYXRSb3VuZGVkUmVjdCwgQ2Fp
cm86OlNoYWRvd1N0YXRlPiB7CisgICAgc3RydWN0IEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBGbG9hdFJv
dW5kZWRSZWN0PiB7CiAgICAgICAgIHZpcnR1YWwgfkZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkg
PSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxh
eSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpLCB7IH0sIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwx
PigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3Zl
cnJpZGUKQEAgLTM2NiwxNyArNjM4LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAg
fTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgc3Ry
dWN0IEZpbGxQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0
aCwgQ2Fpcm86OkZpbGxTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgIHN0cnVjdCBG
aWxsUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPFBhdGg+IHsK
ICAgICAgICAgdmlydHVhbCB+RmlsbFBhdGgoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBl
eGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAg
ICAgewotICAgICAgICAgICAgQ2Fpcm86OmZpbGxQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5
ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpm
aWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCkpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtMzg4LDIw
ICs2NjAsMTkgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxQYXRoPihwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCkp
OwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3QsIENhaXJvOjpGaWxsU291cmNlLCBD
YWlybzo6U2hhZG93U3RhdGU+IHsKKyAgICBzdHJ1Y3QgRmlsbEVsbGlwc2UgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKICAgICAgICAgdmlydHVh
bCB+RmlsbEVsbGlwc2UoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAg
ICAgICAgUGF0aCBwYXRoOwogICAgICAgICAgICAgcGF0aC5hZGRFbGxpcHNlKGFyZzwwPigpKTsK
LSAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwg
cGF0aCwgYXJnPDE+KCksIGFyZzwyPigpKTsKKyAgICAgICAgICAgIENhaXJvOjpmaWxsUGF0aChj
b250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgcGF0aCk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYgdHMpIG92ZXJyaWRlCkBAIC00MTAsMTggKzY4MSwxNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3QsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKIHsKLSAgICBzdHJ1Y3QgU3Ryb2tlUmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0
aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UmVjdCwgZmxvYXQsIENhaXJvOjpTdHJva2VTb3VyY2Us
IENhaXJvOjpTaGFkb3dTdGF0ZT4geworICAgIHN0cnVjdCBTdHJva2VSZWN0IGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdD4gewogICAgICAg
ICB2aXJ0dWFsIH5TdHJva2VSZWN0KCkgPSBkZWZhdWx0OwogCiAgICAgICAgIHZvaWQgZXhlY3V0
ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIENhaXJvOjpzdHJva2VSZWN0KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSk7CisgICAgICAgICAgICBD
YWlybzo6c3Ryb2tlUmVjdChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCksIGFy
ZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykg
b3ZlcnJpZGUKQEAgLTQzMCwxOCArNzAwLDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6
U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCkpOwogfQogCiB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
IHsKLSAgICBzdHJ1Y3QgU3Ryb2tlUGF0aCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVy
YXRpb25EYXRhPFBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2UsIENhaXJvOjpTaGFkb3dTdGF0ZT4g
eworICAgIHN0cnVjdCBTdHJva2VQYXRoIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8UGF0aD4gewogICAgICAgICB2aXJ0dWFsIH5TdHJva2VQYXRoKCkgPSBkZWZhdWx0
OwogCiAgICAgICAgIHZvaWQgZXhlY3V0ZShQYWludGluZ09wZXJhdGlvblJlcGxheSYgcmVwbGF5
ZXIpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNv
bnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpKTsK
KyAgICAgICAgICAgIENhaXJvOjpzdHJva2VQYXRoKGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIp
LCBhcmc8MD4oKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYg
dHMpIG92ZXJyaWRlCkBAIC00NTMsMjAgKzcyMiwxOSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOworICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBz
dHJ1Y3QgU3Ryb2tlRWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZSwgQ2Fpcm86OlNoYWRvd1N0YXRlPiB7
CisgICAgc3RydWN0IFN0cm9rZUVsbGlwc2UgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3Bl
cmF0aW9uRGF0YTxGbG9hdFJlY3Q+IHsKICAgICAgICAgdmlydHVhbCB+U3Ryb2tlRWxsaXBzZSgp
ID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBs
YXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBQYXRoIHBhdGg7
CiAgICAgICAgICAgICBwYXRoLmFkZEVsbGlwc2UoYXJnPDA+KCkpOwotICAgICAgICAgICAgQ2Fp
cm86OnN0cm9rZVBhdGgoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIHBhdGgsIGFyZzwxPigp
LCBhcmc8Mj4oKSk7CisgICAgICAgICAgICBDYWlybzo6c3Ryb2tlUGF0aChjb250ZXh0Rm9yUmVw
bGF5KHJlcGxheWVyKSwgcGF0aCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYgdHMpIG92ZXJyaWRlCkBAIC00NzUsOCArNzQzLDcgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKKyAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0KSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTUwMCwxMyArNzY3
LDEyIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBz
dHJ1Y3QgRHJhd0dseXBocyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PENhaXJvOjpGaWxsU291cmNlLCBDYWlybzo6U3Ryb2tlU291cmNlLCBDYWlybzo6U2hhZG93U3Rh
dGUsIEZsb2F0UG9pbnQsIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3Rv
cjxjYWlyb19nbHlwaF90PiwgZmxvYXQsIFRleHREcmF3aW5nTW9kZUZsYWdzLCBmbG9hdCwgRmxv
YXRTaXplLCBDb2xvciwgRm9udFNtb290aGluZ01vZGU+IHsKKyAgICBzdHJ1Y3QgRHJhd0dseXBo
cyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIFJl
ZlB0cjxjYWlyb19zY2FsZWRfZm9udF90PiwgZmxvYXQsIFZlY3RvcjxjYWlyb19nbHlwaF90Piwg
ZmxvYXQsIEZvbnRTbW9vdGhpbmdNb2RlPiB7CiAgICAgICAgIHZpcnR1YWwgfkRyYXdHbHlwaHMo
KSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVw
bGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRy
YXdHbHlwaHMoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwg
YXJnPDI+KCksIGFyZzwzPigpLCBhcmc8ND4oKS5nZXQoKSwKLSAgICAgICAgICAgICAgICBhcmc8
NT4oKSwgYXJnPDY+KCksIGFyZzw3PigpLCBhcmc8OD4oKSwgYXJnPDk+KCksIGFyZzwxMD4oKSwg
YXJnPDExPigpLCBhcmc8MTI+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdHbHlwaHMoY29u
dGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKS5nZXQoKSwgYXJnPDI+
KCksIGFyZzwzPigpLCBhcmc8ND4oKSwgYXJnPDU+KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtNTI4LDEyICs3OTQsOSBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaAogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+
KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0g
ICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LAorICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdHbHlwaHM+KHBvaW50LAogICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVk
X2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLAotICAgICAgICBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgV1RGTW92ZShjYWlyb0dseXBocyksIHhPZmZzZXQsIHN0
YXRlLnRleHREcmF3aW5nTW9kZSwKLSAgICAgICAgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLCBmb250U21vb3RoaW5nKSk7CisgICAg
ICAgIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBXVEZNb3ZlKGNhaXJvR2x5cGhzKSwgeE9m
ZnNldCwgZm9udFNtb290aGluZykpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKQEAgLTU4NCwxMiArODQ3LDEy
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
IG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpCiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
CiB7Ci0gICAgc3RydWN0IERyYXdSZWN0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRSZWN0LCBmbG9hdCwgQ29sb3IsIFN0cm9rZVN0eWxlLCBDb2xvcj4gewor
ICAgIHN0cnVjdCBEcmF3UmVjdCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25E
YXRhPEZsb2F0UmVjdCwgZmxvYXQ+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd1JlY3QoKSA9IGRl
ZmF1bHQ7CiAKICAgICAgICAgdm9pZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiBy
ZXBsYXllcikgb3ZlcnJpZGUKICAgICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdSZWN0
KGNvbnRleHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigp
LCBhcmc8Mz4oKSwgYXJnPDQ+KCkpOworICAgICAgICAgICAgQ2Fpcm86OmRyYXdSZWN0KGNvbnRl
eHRGb3JSZXBsYXkocmVwbGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mIHRzKSBvdmVycmlkZQpAQCAtNTk4LDE4ICs4
NjEsMTcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgc3RydWN0IERyYXdMaW5lIGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgRmxvYXRQb2ludCwgU3Ryb2tl
U3R5bGUsIENvbG9yLCBmbG9hdCwgYm9vbD4geworICAgIHN0cnVjdCBEcmF3TGluZSBmaW5hbCA6
IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIEZsb2F0UG9pbnQ+
IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmUoKSA9IGRlZmF1bHQ7CiAKICAgICAgICAgdm9p
ZCBleGVjdXRlKFBhaW50aW5nT3BlcmF0aW9uUmVwbGF5JiByZXBsYXllcikgb3ZlcnJpZGUKICAg
ICAgICAgewotICAgICAgICAgICAgQ2Fpcm86OmRyYXdMaW5lKGNvbnRleHRGb3JSZXBsYXkocmVw
bGF5ZXIpLCBhcmc8MD4oKSwgYXJnPDE+KCksIGFyZzwyPigpLCBhcmc8Mz4oKSwgYXJnPDQ+KCks
IGFyZzw1PigpKTsKKyAgICAgICAgICAgIENhaXJvOjpkcmF3TGluZShjb250ZXh0Rm9yUmVwbGF5
KHJlcGxheWVyKSwgYXJnPDA+KCksIGFyZzwxPigpKTsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTYyMSwxOCArODgzLDE3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4o
cG9pbnQxLCBwb2ludDIpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGlu
ZXMsIFN0cm9rZVN0eWxlKQogewotICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hB
cnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKKyAgICBzdHJ1Y3QgRHJhd0xpbmVzRm9yVGV4dCBm
aW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRhPEZsb2F0UG9pbnQsIGZsb2F0
LCBEYXNoQXJyYXksIGJvb2wsIGJvb2w+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9y
VGV4dCgpID0gZGVmYXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRp
b25SZXBsYXkmIHJlcGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWly
bzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVyKSwgYXJnPDA+KCks
IGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpLCBhcmc8NT4oKSk7CisgICAg
ICAgICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb250ZXh0Rm9yUmVwbGF5KHJlcGxheWVy
KSwgYXJnPDA+KCksIGFyZzwxPigpLCBhcmc8Mj4oKSwgYXJnPDM+KCksIGFyZzw0PigpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAg
LTY0NCw4ICs5MDUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaQogICAgIGlmICh3aWR0aHMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQs
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ry
b2tlQ29sb3IpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihw
b2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKSk7CiB9
CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQpA
QCAtNjY5LDEyICs5MjksMTIgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG8KIAogdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgc3RydWN0IERyYXdFbGxpcHNlIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJh
dGlvbkRhdGE8RmxvYXRSZWN0LCBDb2xvciwgU3Ryb2tlU3R5bGUsIENvbG9yLCBmbG9hdD4gewor
ICAgIHN0cnVjdCBEcmF3RWxsaXBzZSBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRp
b25EYXRhPEZsb2F0UmVjdD4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3RWxsaXBzZSgpID0gZGVm
YXVsdDsKIAogICAgICAgICB2b2lkIGV4ZWN1dGUoUGFpbnRpbmdPcGVyYXRpb25SZXBsYXkmIHJl
cGxheWVyKSBvdmVycmlkZQogICAgICAgICB7Ci0gICAgICAgICAgICBDYWlybzo6ZHJhd0VsbGlw
c2UoY29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpLCBhcmc8MT4oKSwgYXJnPDI+
KCksIGFyZzwzPigpLCBhcmc8ND4oKSk7CisgICAgICAgICAgICBDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29udGV4dEZvclJlcGxheShyZXBsYXllciksIGFyZzwwPigpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJiB0cykgb3ZlcnJpZGUKQEAgLTY4Myw4ICs5NDMsNyBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRl
LmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5z
dHJva2VUaGlja25lc3MpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4o
cmVjdCkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQo=
</data>
<flag name="review"
          id="456606"
          type_id="1"
          status="?"
          setter="fujii"
    />
    <flag name="commit-queue"
          id="456623"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>