<?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>83011</bug_id>
          
          <creation_ts>2012-04-03 02:33:07 -0700</creation_ts>
          <short_desc>Add JavaScript and CSS code for the calendar picker implementation</short_desc>
          <delta_ts>2019-05-02 16:23:08 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>83001</dependson>
          <blocked>53961</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>haraken</cc>
    
    <cc>keishi</cc>
    
    <cc>morrita</cc>
    
    <cc>munna1991vikram</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>594319</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-03 02:33:07 -0700</bug_when>
    <thetext>Add JavaScript and CSS code for the calendar picker implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594351</commentid>
    <comment_count>1</comment_count>
      <attachid>135302</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-03 03:53:40 -0700</bug_when>
    <thetext>Created attachment 135302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595138</commentid>
    <comment_count>2</comment_count>
      <attachid>135486</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-03 19:09:46 -0700</bug_when>
    <thetext>Created attachment 135486
Patch 2

Code cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595146</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-03 19:16:16 -0700</bug_when>
    <thetext>Hattori-san, would you do informal review for the patch please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595150</commentid>
    <comment_count>4</comment_count>
      <attachid>135486</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-03 19:19:15 -0700</bug_when>
    <thetext>Comment on attachment 135486
Patch 2

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Add calendarPicker.js and calendarPicker.css, and a buld rule to

oops,
and a buld rule -&gt; and add a build rule

&gt; Source/WebCore/ChangeLog:9
&gt; +        generte a C++ file. This change doesn&apos;t make any behavior change

generte -&gt; generate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595384</commentid>
    <comment_count>5</comment_count>
      <attachid>135486</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-04-04 03:49:42 -0700</bug_when>
    <thetext>Comment on attachment 135486
Patch 2

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

&gt; Source/WebCore/Resources/calendarPicker.css:97
&gt; +}

Is this used?

&gt; Source/WebCore/Resources/calendarPicker.js:36
&gt; +var Class = {

Inspector code would use something plural like ClassNames.

&gt; Source/WebCore/Resources/calendarPicker.js:37
&gt; +    Available: &apos;available&apos;,

Inspector code uses double quotes for all strings.

&gt; Source/WebCore/Resources/calendarPicker.js:656
&gt; + * @param {boolean} right false:left, true:right

this param doesn&apos;t exist anymore.

&gt; Source/WebCore/Resources/calendarPicker.js:693
&gt; +    if (this._lastY &gt; 0 &amp;&amp; this._x &gt; 0)

this._lastY should be this._y
The next line too.

&gt; Source/WebCore/Resources/calendarPicker.js:775
&gt; +    node.classList.add(Class.Selected);

I found it strange that the selected date of the DaysTable doesn&apos;t match the node with the day-selected class.
I also think that it would be useful to show the current value inside the calendar.

Maybe there should be a selected date that is the value
and a separate highlighted date for mouse hover.

&gt; Source/WebCore/Resources/calendarPicker.js:863
&gt; +        } else if (dayNode.classList.contains(Class.UnavailableUp)) {

Class.UnavailableUp and Class.UnavailableDown are never added to any node.

&gt; Source/WebCore/Resources/calendarPicker.js:930
&gt; +        global.yearMonthController.moveRelatively(event.shiftKey ? YearMonthController.PREVIOUS_MONTH : YearMonthController.NEXT_MONTH);

Wrong names.
_moveRelatively
YearMonthController._PreviousMonth
YearMonthController._NextMonth

&gt; Source/WebCore/Resources/calendarPicker.js:932
&gt; +        global.yearMonthController.moveRelatively(event.shiftKey ? YearMonthController.PREVIOUS_YEAR : YearMonthController.NEXT_YEAR);

_moveRelatively
YearMonthController._NextYear
YearMonthController._PreviousYear

&gt; Source/WebCore/Resources/calendarPicker.js:934
&gt; +        global.yearMonthController.moveRelatively(event.shiftKey ? YearMonthController.PREVIOUS_10YEARS : YearMonthController.NEXT_10YEARS);

_moveRelatively
YearMonthController._PreviousTenYears
YearMonthController._NextTenYears

&gt; ManualTests/forms/calendar-picker.html:53
&gt; +var japaneseArguments = {

Is this used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596258</commentid>
    <comment_count>6</comment_count>
      <attachid>135486</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-04 20:21:46 -0700</bug_when>
    <thetext>Comment on attachment 135486
Patch 2

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

Thank you for reviewing the long code.

&gt;&gt; Source/WebCore/Resources/calendarPicker.css:97
&gt;&gt; +}
&gt; 
&gt; Is this used?

Deleted.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:36
&gt;&gt; +var Class = {
&gt; 
&gt; Inspector code would use something plural like ClassNames.

Renamed to ClassNames.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:37
&gt;&gt; +    Available: &apos;available&apos;,
&gt; 
&gt; Inspector code uses double quotes for all strings.

Replaced &apos; with &quot;.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:656
&gt;&gt; + * @param {boolean} right false:left, true:right
&gt; 
&gt; this param doesn&apos;t exist anymore.

Right.  Deleted.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:693
&gt;&gt; +    if (this._lastY &gt; 0 &amp;&amp; this._x &gt; 0)
&gt; 
&gt; this._lastY should be this._y
&gt; The next line too.

Fixed.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:775
&gt;&gt; +    node.classList.add(Class.Selected);
&gt; 
&gt; I found it strange that the selected date of the DaysTable doesn&apos;t match the node with the day-selected class.
&gt; I also think that it would be useful to show the current value inside the calendar.
&gt; 
&gt; Maybe there should be a selected date that is the value
&gt; and a separate highlighted date for mouse hover.

I don&apos;t like to change the UI behavior at this moment because Chrome UX/UI team agreed about the current behavior.
Let&apos;s change the behavior if we have a lot of complain.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:863
&gt;&gt; +        } else if (dayNode.classList.contains(Class.UnavailableUp)) {
&gt; 
&gt; Class.UnavailableUp and Class.UnavailableDown are never added to any node.

Removed related code.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:930
&gt;&gt; +        global.yearMonthController.moveRelatively(event.shiftKey ? YearMonthController.PREVIOUS_MONTH : YearMonthController.NEXT_MONTH);
&gt; 
&gt; Wrong names.
&gt; _moveRelatively
&gt; YearMonthController._PreviousMonth
&gt; YearMonthController._NextMonth

Fixed. They should be public.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:932
&gt;&gt; +        global.yearMonthController.moveRelatively(event.shiftKey ? YearMonthController.PREVIOUS_YEAR : YearMonthController.NEXT_YEAR);
&gt; 
&gt; _moveRelatively
&gt; YearMonthController._NextYear
&gt; YearMonthController._PreviousYear

ditto.

&gt;&gt; Source/WebCore/Resources/calendarPicker.js:934
&gt;&gt; +        global.yearMonthController.moveRelatively(event.shiftKey ? YearMonthController.PREVIOUS_10YEARS : YearMonthController.NEXT_10YEARS);
&gt; 
&gt; _moveRelatively
&gt; YearMonthController._PreviousTenYears
&gt; YearMonthController._NextTenYears

ditto.

&gt;&gt; ManualTests/forms/calendar-picker.html:53
&gt;&gt; +var japaneseArguments = {
&gt; 
&gt; Is this used?

This is not used, but it&apos;s useful for l10n test. I&apos;d like to keep this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596259</commentid>
    <comment_count>7</comment_count>
      <attachid>135750</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-04 20:27:21 -0700</bug_when>
    <thetext>Created attachment 135750
Patch 3

Addressed the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596288</commentid>
    <comment_count>8</comment_count>
      <attachid>135750</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-04-04 21:37:15 -0700</bug_when>
    <thetext>Comment on attachment 135750
Patch 3

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

Also I noticed that you can&apos;t use up/down arrow keys inside of the month popup.

&gt; Source/WebCore/Resources/calendarPicker.js:206
&gt; +    return yearString + &quot;-&quot; + (&quot;0&quot; + (month + 1)).substr(-2, 2) + &quot;-&quot; + (&quot;0&quot; + day).substr(-2, 2)

Missing semicolon.

&gt; Source/WebCore/Resources/calendarPicker.js:390
&gt; +    this._wall.addEventListener(&quot;click&quot;, bind(this._closePopup, this), false);

Maybe you can use blur event to remove this wall element?
this._monthPopup.addEventListener(&quot;blur&quot;, bind(this._closePopup, this), false);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596325</commentid>
    <comment_count>9</comment_count>
      <attachid>135762</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-04 23:22:54 -0700</bug_when>
    <thetext>Created attachment 135762
Patch 4

Keyboard operation for the month popup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596327</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-04 23:24:28 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 135750 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135750&amp;action=review
&gt; 
&gt; Also I noticed that you can&apos;t use up/down arrow keys inside of the month popup.

Fixed.

&gt; &gt; Source/WebCore/Resources/calendarPicker.js:206
&gt; &gt; +    return yearString + &quot;-&quot; + (&quot;0&quot; + (month + 1)).substr(-2, 2) + &quot;-&quot; + (&quot;0&quot; + day).substr(-2, 2)
&gt; 
&gt; Missing semicolon.

Fixed.

&gt; &gt; Source/WebCore/Resources/calendarPicker.js:390
&gt; &gt; +    this._wall.addEventListener(&quot;click&quot;, bind(this._closePopup, this), false);
&gt; 
&gt; Maybe you can use blur event to remove this wall element?
&gt; this._monthPopup.addEventListener(&quot;blur&quot;, bind(this._closePopup, this), false);

It&apos;s not sufficient.  I&apos;d like to disallow DaysArea hover and click actions during opening the month popup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596344</commentid>
    <comment_count>11</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-04-05 00:01:11 -0700</bug_when>
    <thetext>I think its ok now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596352</commentid>
    <comment_count>12</comment_count>
      <attachid>135762</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-04-05 00:26:58 -0700</bug_when>
    <thetext>Comment on attachment 135762
Patch 4

kinda stamping. Let us land this and see how it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596353</commentid>
    <comment_count>13</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-05 00:27:56 -0700</bug_when>
    <thetext>Thank you!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596359</commentid>
    <comment_count>14</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-04-05 00:31:06 -0700</bug_when>
    <thetext>Committed r113298: &lt;http://trac.webkit.org/changeset/113298&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135302</attachid>
            <date>2012-04-03 03:53:40 -0700</date>
            <delta_ts>2012-04-03 19:09:39 -0700</delta_ts>
            <desc>Patch </desc>
            <filename>bug-83011-20120403195338.patch</filename>
            <type>text/plain</type>
            <size>44514</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyOTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTA3YThhYTljYTUyMzk3
MGQyMTM3NDMxNGI3Njc2MTVjMjM1YTY0OC4uYzZlMmM4Zjg5ODFiZTE5ZmU2N2M4MmEwZWM1Y2Y5
ZjU2MGZjMTExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTAzICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgSmF2YVNjcmlwdCBh
bmQgQ1NTIGNvZGUgZm9yIHRoZSBjYWxlbmRhciBwaWNrZXIgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDExCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGVuZGFyUGlj
a2VyLmpzIGFuZCBjYWxlbmRhclBpY2tlci5jc3MsIGFuZCBhIGJ1bGQgcnVsZSB0bworICAgICAg
ICBnZW5lcnRlIGEgQysrIGZpbGUuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgbWFrZSBhbnkgYmVoYXZp
b3IgY2hhbmdlCisgICAgICAgIGJlY2F1c2UgdGhlIGNvZGUgaXMgd3JhcHBlZCBieSBFTkFCTEUo
Q0FMRU5EQVJfUElDS0VSKS4KKworICAgICAgICBUZXN0czogTWFudWFsVGVzdHMvZm9ybXMvY2Fs
ZW5kYXItcGlja2VyLmh0bWwKKworICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5j
c3M6IEFkZGVkLgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5qczogQWRkZWQu
CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEdlbmVyYXRlIENhbGVuZGFyUGlj
a2VyLntjcHAsaH0gZnJvbSBjYWxlbmRhclBpY2tlci57Y3NzLGpzfS4KKwogMjAxMi0wNC0wMiAg
Q2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBzZWFy
Y2ggZmllbGQgb24gR29vZ2xlLmNvbSBkb2VzIG5vdCBoYXZlIHRoZSBBWFNlYXJjaEZpZWxkIHN1
YnJvbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tl
ci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQyY2IwYWNiOTJkMWE5OGE2NWY4ZDc1NzE2YjU3OTQ1YzFlNTNiMTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCkBA
IC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworYm9keSB7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBwdXJwbGU7CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250
cm9sOworICAgIG1hcmdpbjogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorCisubm8tZm9j
dXMtcmluZyA6Zm9jdXMgeworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKKyNtYWluIHsKKyAgICB4
YmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRv
bSwgZnJvbSgjZjBmOGZmKSwgdG8oI2NjZGRlZSkpOworICAgIGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOworICAgIGJvcmRlcjogc29saWQgMXB4ICM4ODk5YWE7CisgICAgYm94LXNoYWRvdzogaW5z
ZXQgMnB4IDJweCAycHggd2hpdGUsCisgICAgICAgIGluc2V0IC0ycHggLTJweCAxcHggcmdiYSgw
LDAsMCwwLjEpOworICAgIHBhZGRpbmc6IDZweDsKK30KKworLnllYXItbW9udGgtYXJlYSB7Cit9
CisKKy55ZWFyLW1vbnRoLXVwcGVyIHsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKK30KKwor
LnllYXItc2VsZWN0b3IgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHdpZHRoOiA2ZW07
Cit9CisKKy5tb250aC1zZWxlY3Rvci1ib3ggeworICAgIGRpc3BsYXk6IGlubGluZS1ib3g7Cisg
ICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtYm94LWZsZXg6IDI7Cit9CisKKy5t
b250aC1zZWxlY3RvciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29y
OiBwb2ludGVyOworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBwYWRkaW5nOiAzcHgg
NnB4IDNweCA2cHg7Cit9CisubW9udGgtc2VsZWN0b3I6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICIg
4pa8IjsKKyAgICBmb250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1
cCB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICB6LWluZGV4OiAyOworfQorCisubW9udGgtc2Vs
ZWN0b3Itd2FsbCB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBoZWlnaHQ6IDEwMCU7CisgICAg
bGVmdDogMHB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDBweDsKKyAgICB3
aWR0aDogMTAwJTsKK30KKworLnllYXItbW9udGgtYnV0dG9ucyB7Cit9CisKKy8qIEZJWE1FOiBX
ZSdkIGxpa2UgdG8gdXNlIHRoZSBzdGFuZGFyZCBidXR0b24gYXBwZWFyYW5jZSBmb3Igbm9uLU1h
Yy4gKi8KKy55ZWFyLW1vbnRoLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25l
OworICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVm
dCBib3R0b20sIGZyb20oI2VlZSksIGNvbG9yLXN0b3AoMC40LCAjZmZmKSwgY29sb3Itc3RvcCgw
LjYsICNkZGRkZGQpLCB0bygjZWVlKSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggIzQ0NDsKKyAg
ICBib3JkZXItcmFkaXVzOiAzcHg7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAxcHgg
cmdiYSgyNTUsMjU1LDI1NSwwLjQpLCBpbnNldCAtMXB4IC0xcHggMXB4IHJnYmEoMjU1LDI1NSwy
NTUsMC40KTsKKyAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7
Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbjpob3ZlciB7CisgICAgYmFja2dyb3VuZDogLXdlYmtp
dC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZTBmMGZmKSwg
Y29sb3Itc3RvcCgwLjQsICNlMGYwZmYpLCBjb2xvci1zdG9wKDAuNiwgI2IwZTBmZiksIHRvKCNi
MGUwZmYpKTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjNDQ4OworfQorCisueWVhci1tb250aC1i
dXR0b246YWN0aXZlIHsKKyAgICBib3JkZXI6IHNvbGlkIDFweCBibGFjazsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAxcHggMXB4IDFweCByZ2JhKDAsMCwwLDAuMyksIGluc2V0IC0xcHggLTFweCAx
cHggcmdiYSgwLDAsMCwwLjMpOworfQorCisueWVhci1tb250aC1idXR0b246ZGlzYWJsZWQgewor
ICAgIGNvbG9yOiAjODg4OworICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFy
LCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZSksIGNvbG9yLXN0b3AoMC40LCAjZmZm
KSwgY29sb3Itc3RvcCgwLjYsICNkZGRkZGQpLCB0bygjZWVlKSk7CisgICAgYm9yZGVyOiBzb2xp
ZCAxcHggI2NjYzsKKyAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDFweCByZ2JhKDI1NSwy
NTUsMjU1LDAuNCksIGluc2V0IC0xcHggLTFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpOwor
fQorCisueWVhci1tb250aC1idXR0b24tbGVmdCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworfQorCisueWVhci1tb250aC1idXR0b24tcmlnaHQgeworICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKK30KKworLmRheXMtYXJlYS1jb250YWluZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOworICAgIGJvcmRlcjogc29saWQgMXB4IGJsYWNrOworICAgIG1hcmdpbi1ib3R0b206
IDRweDsKKyAgICBtYXJnaW4tdG9wOiA0cHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKwor
LmRheXMtYXJlYSB7IC8qIDx0YWJsZT4gKi8KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7
CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOworICAgIHRhYmxlLWxheW91dDogZml4
ZWQ7CisgICAgd2lkdGg6IDEwMCU7Cit9CisKKy5kYXktbGFiZWwtY29udGFpbmVyIHsgLyogPHRy
PiAqLworfQorCisuZGF5LWxhYmVsIHsgLyogPHRoPiAqLworICAgIC13ZWJraXQtYm94LXNpemlu
ZzogYm9yZGVyLWJveDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlOWZmOworICAgIGJvcmRl
ci1sZWZ0LWNvbG9yOiAjZjBmNGZmOworICAgIGJvcmRlci10b3AtY29sb3I6ICNmMGY0ZmY7Cisg
ICAgYm9yZGVyOiBzb2xpZCAxcHggI2QwZDRmMDsKKyAgICBjb2xvcjogIzIwYzsKKyAgICBmb250
LXdlaWdodDogbm9ybWFsOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KKworLndlZWstY29u
dGFpbmVyIHsgLyogPHRyPiAqLworfQorCisuZGF5IHsgLyogPHRkPiAqLworICAgIHBhZGRpbmc6
IDFweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hp
dGU7CisgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5n
OiBib3JkZXItYm94OworfQorCisuYXZhaWxhYmxlIHsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cisg
ICAgZm9udC13ZWlnaHQ6IDcwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgLXdl
YmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOworfQorCisubm90LXRoaXMtbW9udGggewor
ICAgIGNvbG9yOiBncmF5dGV4dDsKKyAgICBmb250LXdlaWdodDogNDAwOworICAgIHRleHQtc2hh
ZG93OiBub25lOworfQorCisuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogaGlnaGxpZ2h0OworICAgIGNvbG9yOiBoaWdobGlnaHR0ZXh0OworICAgIHRleHQt
c2hhZG93OiBub25lOworfQorCisudW5hdmFpbGFibGUgeworICAgIGN1cnNvcjogZGVmYXVsdDsK
KyAgICBjb2xvcjogZ3JheXRleHQ7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCAjZWVlOworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNv
bG9yIDAuMnMgZWFzZTsKK30KKworLnVuYXZhaWxhYmxlLXVwIHsKK30KKworLnVuYXZhaWxhYmxl
LWRvd24geworfQorCisudW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKKyAgICBib3JkZXI6IDFw
eCBzb2xpZCBoaWdobGlnaHQ7Cit9CisKKy50b2RheS1idXR0b24geworfQorCisuY2xlYXItYnV0
dG9uIHsKK30KKworLmNhbmNlbC1idXR0b24geworICAgIGZsb2F0OiByaWdodDsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcyBiL1NvdXJj
ZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYWE4MDY5
YjAzNmYwMzdhYjdmNDczODZiYjc3NTRmMzQ2NTU1NjFkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzCkBAIC0wLDAgKzEsOTI5IEBA
CisidXNlIHN0cmljdCI7CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRklYTUU6CisvLyAgLSBSVEwKKy8vICAtIFRvdWNoIGV2ZW50CisK
Ky8qKgorICogVGhlIG51bWJlciBvZiB3ZWVrIGxpbmVzIGluIHRoZSBzY3JlZW4uCisgKiBAY29u
c3QKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK3ZhciBXZWVrcyA9IDY7CisKK3ZhciBDbGFzcyA9
IHsKKyAgICBBdmFpbGFibGU6ICdhdmFpbGFibGUnLAorICAgIENhbmNlbEJ1dHRvbjogJ2NhbmNl
bC1idXR0b24nLAorICAgIENsZWFyQnV0dG9uOiAnY2xlYXItYnV0dG9uJywKKyAgICBEYXk6ICdk
YXknLAorICAgIERheUxhYmVsOiAnZGF5LWxhYmVsJywKKyAgICBEYXlMYWJlbENvbnRhaW5lcjog
J2RheS1sYWJlbC1jb250YWluZXInLAorICAgIERheXNBcmVhOiAnZGF5cy1hcmVhJywKKyAgICBE
YXlzQXJlYUNvbnRhaW5lcjogJ2RheXMtYXJlYS1jb250YWluZXInLAorICAgIE1vbnRoU2VsZWN0
b3I6ICdtb250aC1zZWxlY3RvcicsCisgICAgTW9udGhTZWxlY3RvckJveDogJ21vbnRoLXNlbGVj
dG9yLWJveCcsCisgICAgTW9udGhTZWxlY3RvclBvcHVwOiAnbW9udGgtc2VsZWN0b3ItcG9wdXAn
LAorICAgIE1vbnRoU2VsZWN0b3JXYWxsOiAnbW9udGgtc2VsZWN0b3Itd2FsbCcsCisgICAgTm9G
b2N1c1Jpbmc6ICduby1mb2N1cy1yaW5nJywKKyAgICBOb3RUaGlzTW9udGg6ICdub3QtdGhpcy1t
b250aCcsCisgICAgU2VsZWN0ZWQ6ICdkYXktc2VsZWN0ZWQnLAorICAgIFRvZGF5QnV0dG9uOiAn
dG9kYXktYnV0dG9uJywKKyAgICBUb2RheUNsZWFyQXJlYTogJ3RvZGF5LWNsZWFyLWFyZWEnLAor
ICAgIFVuYXZhaWxhYmxlOiAndW5hdmFpbGFibGUnLAorICAgIFVuYXZhaWxhYmxlRG93bjogJ3Vu
YXZhaWxhYmxlLWRvd24nLAorICAgIFVuYXZhaWxhYmxlVXA6ICd1bmF2YWlsYWJsZS11cCcsCisg
ICAgV2Vla0NvbnRhaW5lcjogJ3dlZWstY29udGFpbmVyJywKKyAgICBZZWFyTW9udGhBcmVhOiAn
eWVhci1tb250aC1hcmVhJywKKyAgICBZZWFyTW9udGhCdXR0b246ICd5ZWFyLW1vbnRoLWJ1dHRv
bicsCisgICAgWWVhck1vbnRoQnV0dG9uTGVmdDogJ3llYXItbW9udGgtYnV0dG9uLWxlZnQnLAor
ICAgIFllYXJNb250aEJ1dHRvblJpZ2h0OiAneWVhci1tb250aC1idXR0b24tcmlnaHQnLAorICAg
IFllYXJNb250aFVwcGVyOiAneWVhci1tb250aC11cHBlcicsCit9OworCisvKioKKyAqIEB0eXBl
IHtPYmplY3R9CisgKi8KK3ZhciBnbG9iYWwgPSB7CisgICAgYXJndW1lbnRzUmVjZWl2ZWQ6IGZh
bHNlLAorICAgIGxhc3RYOiAtMSwKKyAgICBsYXN0WTogLTEsCisgICAgbGFzdFllYXI6IC0xLAor
ICAgIGxhc3RNb250aDogLTEsCisgICAgcGFyYW1zOiBudWxsLAorfTsKKworLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
Ly8gVXRpbGl0eSBmdW5jdGlvbnMKKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gaWQKKyAqLwor
ZnVuY3Rpb24gJChpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
Cit9CisKK2Z1bmN0aW9uIGJpbmQoZnVuYywgY29udGV4dCkgeworICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTsKKyAg
ICB9OworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lCisgKiBAcGFyYW0ge3N0
cmluZ30gb3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3RleHQKKyAqLworZnVuY3Rp
b24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7CisgICAgdmFy
IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGlmIChvcHRf
Y2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIG9wdF9jbGFzcyk7
CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKK2Z1
bmN0aW9uIGdldExvY2FsZSgpIHsKKyAgICByZXR1cm4gKGdsb2JhbC5wYXJhbXMubG9jYWxlIHx8
ICdlbi11cycpLnRvTG93ZXJDYXNlKCk7Cit9CisKK2Z1bmN0aW9uIGdldExhbmd1YWdlKCkgewor
ICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTsKKyAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1h
dGNoKC9eKFthLXpBLVpdKykvKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuICdl
bic7CisgICAgcmV0dXJuIHJlc3VsdFsxXS50b0xvd2VyQ2FzZSgpOworfQorCitmdW5jdGlvbiBm
b3JtYXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHsKKyAgICB2YXIgeWVhclN0cmluZyA9IFN0cmlu
Zyh5ZWFyKTsKKyAgICB2YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1vbnRoTGFiZWxz
W21vbnRoXTsKKyAgICBzd2l0Y2ggKGdldExhbmd1YWdlKCkpIHsKKyAgICBjYXNlICdldSc6Cisg
ICAgY2FzZSAnZmlsJzoKKyAgICBjYXNlICdsdCc6CisgICAgY2FzZSAnbWwnOgorICAgIGNhc2Ug
J210JzoKKyAgICBjYXNlICd0bCc6CisgICAgY2FzZSAndXInOgorICAgICAgICByZXR1cm4geWVh
clN0cmluZyArICcgJyArIG1vbnRoU3RyaW5nOworICAgIGNhc2UgJ2h1JzoKKyAgICAgICAgcmV0
dXJuIHllYXJTdHJpbmcgKyAnLiAnICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAnamEnOgorICAg
ICAgICBpZiAoeWVhciA+IDE5ODkpCisgICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmlu
ZyArICflubQo5bmz5oiQJyArICh5ZWFyIC0gMTk4OCkgKyAn5bm0KSAnOworICAgICAgICBlbHNl
IGlmICh5ZWFyID09IDE5ODkpCisgICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmluZyAr
ICflubQo5bmz5oiQ5YWD5bm0KSAnOworICAgICAgICBlbHNlIGlmICh5ZWFyID49IDE5MjcpCisg
ICAgICAgICAgICB5ZWFyU3RyaW5nID0geWVhclN0cmluZyArICflubQo5pit5ZKMJyArICh5ZWFy
IC0gMTkyNSkgKyAn5bm0KSAnOworICAgICAgICBlbHNlIGlmICh5ZWFyID4gMTkxMikKKyAgICAg
ICAgICAgIHllYXJTdHJpbmcgPSB5ZWFyU3RyaW5nICsgJ+W5tCjlpKfmraMnICsgKHllYXIgLSAx
OTExKSArICflubQpICc7CisgICAgICAgIGVsc2UgaWYgKHllYXIgPT0gMTkxMiAmJiBtb250aCA+
PSA3KQorICAgICAgICAgICAgeWVhclN0cmluZyA9IHllYXJTdHJpbmcgKyAn5bm0KOWkp+ato+WF
g+W5tCkgJzsKKyAgICAgICAgZWxzZSBpZiAoeWVhciA+IDE4NjgpCisgICAgICAgICAgICB5ZWFy
U3RyaW5nID0geWVhclN0cmluZyArICflubQo5piO5rK7JyArICh5ZWFyIC0gMTg2NykgKyAn5bm0
KSAnOworICAgICAgICBlbHNlIGlmICh5ZWFyID09IDE4NjgpCisgICAgICAgICAgICB5ZWFyU3Ry
aW5nID0geWVhclN0cmluZyArICflubQo5piO5rK75YWD5bm0KSAnOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB5ZWFyU3RyaW5nICs9ICflubQgJzsKKyAgICAgICAgcmV0dXJuIHllYXJTdHJp
bmcgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICd6aCc6CisgICAgICAgIHJldHVybiB5ZWFyU3Ry
aW5nICsgJ+W5tCcgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICdrbyc6CisgICAgICAgIHJldHVy
biB5ZWFyU3RyaW5nICsgJ+uFhCAnICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAnbHYnOgorICAg
ICAgICByZXR1cm4geWVhclN0cmluZyArICcuIGcuICcgKyBtb250aFN0cmluZzsKKyAgICBjYXNl
ICdwdCc6CisgICAgICAgIHJldHVybiBtb250aFN0cmluZyArICcgZGUgJyArIHllYXJTdHJpbmc7
CisgICAgY2FzZSAnc3InOgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAnLiAnICsgeWVh
clN0cmluZzsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAnICcg
KyB5ZWFyU3RyaW5nOworICAgIH0KK30KKworZnVuY3Rpb24gY3JlYXRlRGF0ZUZyb21TdHJpbmco
b3B0X2N1cnJlbnQpIHsKKyAgICBpZiAob3B0X2N1cnJlbnQpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IG9wdF9jdXJyZW50Lm1hdGNoKC8oXGQrKS0oXGQrKS0oXGQrKS8pOworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKE51bWJlcihyZXN1
bHRbMV0pLCBOdW1iZXIocmVzdWx0WzJdKSAtIDEsIE51bWJlcihyZXN1bHRbM10pKSk7CisgICAg
fQorICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOworICAgIC8vIENyZWF0ZSBVVEMgZGF0ZSB3aXRo
IHNhbWUgbnVtYmVycyBhcyBsb2NhbCBkYXRlLgorICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVU
Qyhub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIG5vdy5nZXREYXRlKCkpKTsKK30K
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorLy8gSW5pdGlhbGl6YXRpb24KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50
fSBldmVudDsKKyAqLworZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgeworICAgIGlmIChn
bG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwuYXJn
dW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworICAgIGluaXRpYWxpemUoSlNPTi5wYXJzZShldmVudC5k
YXRhKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQoKSB7CisgICAgaWYg
KGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBhcmdz
ID0geworICAgICAgICBtb250aExhYmVscyA6IFsnbTEnLCAnbTInLCAnbTMnLCAnbTQnLCAnbTUn
LCAnbTYnLAorICAgICAgICAgICAgICAgICAgICAgICAnbTcnLCAnbTgnLCAnbTknLCAnbTEwJywg
J20xMScsICdtMTInXSwKKyAgICAgICAgZGF5TGFiZWxzIDogWydkMScsICdkMicsICdkMycsICdk
NCcsICdkNScsICdkNicsICdkNyddLAorICAgICAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAg
ICAgICAgY2xlYXJMYWJlbCA6ICdDbGVhcicsCisgICAgICAgIGNhbmNlbExhYmVsIDogJ0NhbmNl
bCcsCisgICAgICAgIHdlZWtTdGFydERheSA6IDAsCisgICAgICAgIHN0ZXAgOiAxLAorICAgIH07
CisgICAgaW5pdGlhbGl6ZShhcmdzKTsKK30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFy
Z3MKKyAqLworZnVuY3Rpb24gZ2V0QXJndW1lbnRFcnJvcihhcmdzKSB7CisgICAgaWYgKCFhcmdz
Lm1vbnRoTGFiZWxzKQorICAgICAgICByZXR1cm4gJ05vIG1vbnRoTGFiZWxzLic7CisgICAgaWYg
KGFyZ3MubW9udGhMYWJlbHMubGVuZ3RoICE9IDEyKQorICAgICAgICByZXR1cm4gJ21vbnRoTGFi
ZWxzIGlzIG5vdCBhbiBhcnJheSB3aXRoIDEyIGVsZW1lbnRzLic7CisgICAgaWYgKCFhcmdzLmRh
eUxhYmVscykKKyAgICAgICAgcmV0dXJuICdObyBkYXlMYWJlbHMuJzsKKyAgICBpZiAoYXJncy5k
YXlMYWJlbHMubGVuZ3RoICE9IDcpCisgICAgICAgIHJldHVybiAnZGF5TGFiZWxzIGlzIG5vdCBh
biBhcnJheSB3aXRoIDcgZWxlbWVudHMuJzsKKyAgICBpZiAoIWFyZ3MuY2xlYXJMYWJlbCkKKyAg
ICAgICAgcmV0dXJuICdObyBjbGVhckxhYmVsLic7CisgICAgaWYgKCFhcmdzLnRvZGF5TGFiZWwp
CisgICAgICAgIHJldHVybiAnTm8gdG9kYXlMYWJlbC4nOworICAgIGlmIChhcmdzLndlZWtTdGFy
dERheSkgeworICAgICAgICBpZiAoYXJncy53ZWVrU3RhcnREYXkgPCAwIHx8IGFyZ3Mud2Vla1N0
YXJ0RGF5ID4gNikKKyAgICAgICAgICAgIHJldHVybiAnSW52YWxpZCB3ZWVrU3RhcnREYXk6ICcg
KyBhcmdzLndlZWtTdGFydERheTsKKyAgICB9CisgICAgcmV0dXJuICcnOworfQorCisvKioKKyAq
IEBwYXJhbSB7IU9iamVjdH0gYXJncworICovCitmdW5jdGlvbiBpbml0aWFsaXplKGFyZ3MpIHsK
KyAgICB2YXIgbWFpbiA9ICQoJ21haW4nKTsKKyAgICBtYWluLmNsYXNzTGlzdC5hZGQoQ2xhc3Mu
Tm9Gb2N1c1JpbmcpOworCisgICAgdmFyIGVycm9yU3RyaW5nID0gZ2V0QXJndW1lbnRFcnJvcihh
cmdzKTsKKyAgICBpZiAoZXJyb3JTdHJpbmcubGVuZ3RoID4gMCkgeworICAgICAgICBtYWluLnRl
eHRDb250ZW50ID0gJ0ludGVybmFsIGVycm9yOiAnICsgZXJyb3JTdHJpbmc7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZ2xvYmFsLnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIGNoZWNrTGltaXRzKCk7
CisgICAgICAgIGxheW91dCgpOworCisgICAgICAgIHZhciBpbml0aWFsRGF0ZSA9IGNyZWF0ZURh
dGVGcm9tU3RyaW5nKGFyZ3MuY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKGluaXRpYWxEYXRl
IDwgZ2xvYmFsLm1pbmltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwu
bWluaW11bURhdGU7CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xvYmFsLm1heGlt
dW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11bURhdGU7Cisg
ICAgICAgIHNlbGVjdERhdGUoaW5pdGlhbERhdGUpOworCisgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkKKyAgICAgICAg
ICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLmhlaWdodCA9IG1haW4ub2Zmc2V0SGVp
Z2h0ICsgJ3B4JzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHdpbmRvdy5y
ZXNpemVUbyh3aW5kb3cub3V0ZXJXaWR0aCwgbWFpbi5vZmZzZXRUb3AgKyBtYWluLm9mZnNldEhl
aWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIDApOworICAgIH0KK30KKworZnVuY3Rp
b24gY2hlY2tMaW1pdHMoKSB7CisgICAgLy8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUg
V2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oLgorICAgIGdsb2JhbC5taW5pbXVtRGF0
ZSA9IG5ldyBEYXRlKC02MjEzNTU5NjgwMDAwMC4wKTsKKyAgICBnbG9iYWwubWF4aW11bURhdGUg
PSBuZXcgRGF0ZSg4NjQwMDAwMDAwMDAwMDAwLjApOworICAgIC8vIFNlZSBXZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAuCisgICAgZ2xvYmFsLnN0ZXAgPSA4NjQwMDAwMDsKKyAgICBpZiAo
Z2xvYmFsLnBhcmFtcy5taW4pIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5taW4gaXMg
YSB2YWxpZCBkYXRlLgorICAgICAgICBnbG9iYWwubWluaW11bURhdGUgPSBjcmVhdGVEYXRlRnJv
bVN0cmluZyhnbG9iYWwucGFyYW1zLm1pbik7CisgICAgfQorICAgIGlmIChnbG9iYWwucGFyYW1z
Lm1heCkgeworICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1heCBpcyBhIHZhbGlkIGRhdGUu
CisgICAgICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IGNyZWF0ZURhdGVGcm9tU3RyaW5nKGdsb2Jh
bC5wYXJhbXMubWF4KTsKKyAgICB9CisgICAgaWYgKGdsb2JhbC5wYXJhbXMuc3RlcCkKKyAgICAg
ICAgZ2xvYmFsLnN0ZXAgKj0gZ2xvYmFsLnBhcmFtcy5zdGVwOworfQorCitmdW5jdGlvbiBsYXlv
dXQoKSB7CisgICAgdmFyIG1haW4gPSAkKCdtYWluJyk7CisgICAgdmFyIHBhcmFtcyA9IGdsb2Jh
bC5wYXJhbXM7CisgICAgbWFpbi5yZW1vdmVDaGlsZChtYWluLmZpcnN0Q2hpbGQpOworICAgIGRv
Y3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUdsb2JhbEtleSk7
CisKKyAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlciA9IG5ldyBZZWFyTW9udGhDb250cm9s
bGVyKCk7CisgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuYXR0YWNoKHBhcmFtcywgbWFp
bik7CisgICAgdmFyIGNvbnRhaW5lciA9IGxheW91dERheXMocGFyYW1zLCBtYWluKTsKKyAgICBs
YXlvdXRCdXR0b25zKHBhcmFtcywgbWFpbik7CisKKyAgICBjb250YWluZXIuZm9jdXMoKTsKK30K
KworZnVuY3Rpb24gbGF5b3V0RGF5cyhwYXJhbXMsIG1haW4pIHsKKyAgICB2YXIgZWxlbWVudCA9
IGNyZWF0ZUVsZW1lbnQoJ3RhYmxlJywgQ2xhc3MuRGF5c0FyZWEpOworICAgIGVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVEYXlDbGljayk7CisgICAgZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpOworICAgIGVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dCk7CisgICAgdmFyIGNv
bnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3RyJywgQ2xhc3MuRGF5TGFiZWxDb250YWluZXIpOwor
ICAgIHZhciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwucGFyYW1zLndlZWtTdGFydERheSB8fCAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsgaSsrKQorICAgICAgICBjb250YWluZXIuYXBwZW5k
Q2hpbGQoY3JlYXRlRWxlbWVudCgndGgnLCBDbGFzcy5EYXlMYWJlbCwgcGFyYW1zLmRheUxhYmVs
c1sod2Vla1N0YXJ0RGF5ICsgaSkgJSA3XSkpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY29u
dGFpbmVyKTsKKyAgICB2YXIgZGF5cyA9IFtdOworICAgIGZvciAodmFyIHcgPSAwOyB3IDwgV2Vl
a3M7IHcrKykgeworICAgICAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCd0cicsIENsYXNz
LldlZWtDb250YWluZXIpOworICAgICAgICB2YXIgd2VlayA9IFtdOworICAgICAgICBmb3IgKHZh
ciBkID0gMDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGRheSA9IGNyZWF0ZUVsZW1l
bnQoJ3RkJywgQ2xhc3MuRGF5LCAnICcpOworICAgICAgICAgICAgZGF5LnNldEF0dHJpYnV0ZSgn
ZGF0YS1wb3NpdGlvbi14JywgU3RyaW5nKGQpKTsKKyAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1
dGUoJ2RhdGEtcG9zaXRpb24teScsIFN0cmluZyh3KSk7CisgICAgICAgICAgICB3ZWVrLnB1c2go
ZGF5KTsKKyAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXkpOworICAgICAgICB9
CisgICAgICAgIGRheXMucHVzaCh3ZWVrKTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChj
b250YWluZXIpOworICAgIH0KKyAgICBnbG9iYWwuZGF5cyA9IGRheXM7CisgICAgZ2xvYmFsLmRh
eXNBcmVhID0gZWxlbWVudDsKKyAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBD
bGFzcy5EYXlzQXJlYUNvbnRhaW5lcik7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1l
bnQpOworICAgIGNvbnRhaW5lci50YWJJbmRleCA9IDA7CisgICAgY29udGFpbmVyLmFkZEV2ZW50
TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVEYXlzQXJlYUtleSk7CisgICAgbWFpbi5hcHBlbmRD
aGlsZChjb250YWluZXIpOworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK2Z1bmN0aW9uIGxh
eW91dEJ1dHRvbnMocGFyYW1zLCBtYWluKSB7CisgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVs
ZW1lbnQoJ2RpdicsIENsYXNzLlRvZGF5Q2xlYXJBcmVhKTsKKyAgICBnbG9iYWwudG9kYXkgPSBj
cmVhdGVFbGVtZW50KCdpbnB1dCcsIENsYXNzLlRvZGF5QnV0dG9uKTsKKyAgICBnbG9iYWwudG9k
YXkudHlwZSA9ICdidXR0b24nOworICAgIGdsb2JhbC50b2RheS52YWx1ZSA9IHBhcmFtcy50b2Rh
eUxhYmVsOworICAgIGdsb2JhbC50b2RheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRs
ZVRvZGF5KTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZ2xvYmFsLnRvZGF5KTsKKyAgICBn
bG9iYWwuY2xlYXIgPSBudWxsOworICAgIGlmICghcGFyYW1zLnJlcXVpcmVkKSB7CisgICAgICAg
IGdsb2JhbC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ2xhc3MuQ2xlYXJCdXR0b24p
OworICAgICAgICBnbG9iYWwuY2xlYXIudHlwZSA9ICdidXR0b24nOworICAgICAgICBnbG9iYWwu
Y2xlYXIudmFsdWUgPSBwYXJhbXMuY2xlYXJMYWJlbDsKKyAgICAgICAgZ2xvYmFsLmNsZWFyLmFk
ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xlYXIpOworICAgICAgICBjb250YWluZXIu
YXBwZW5kQ2hpbGQoZ2xvYmFsLmNsZWFyKTsKKyAgICB9CisgICAgbWFpbi5hcHBlbmRDaGlsZChj
b250YWluZXIpOworCisgICAgZ2xvYmFsLmxhc3RGb2N1c2FibGVDb250cm9sID0gZ2xvYmFsLmNs
ZWFyIHx8IGdsb2JhbC50b2RheTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKioKKyAqIEBjb25zdHJ1
Y3RvcgorICovCitmdW5jdGlvbiBZZWFyTW9udGhDb250cm9sbGVyKCkgeworICAgIHRoaXMuX2N1
cnJlbnRZZWFyID0gLTE7CisgICAgdGhpcy5fY3VycmVudE1vbnRoID0gLTE7Cit9CisKK1llYXJN
b250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uKHBhcmFtcywgbWFpbikg
eworICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENsYXNzLlll
YXJNb250aEFyZWEpOworCisgICAgdmFyIGlubmVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgn
ZGl2JywgQ2xhc3MuWWVhck1vbnRoVXBwZXIpOworICAgIG91dGVyQ29udGFpbmVyLmFwcGVuZENo
aWxkKGlubmVyQ29udGFpbmVyKTsKKworICAgIHRoaXMuX2F0dGFjaExlZnRCdXR0b25zVG8oaW5u
ZXJDb250YWluZXIpOworCisgICAgdmFyIGJveCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENsYXNz
Lk1vbnRoU2VsZWN0b3JCb3gpOworICAgIGlubmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGJveCk7
CisgICAgLy8gRklYTUU6IFRoZSBwb3B1cC1tZW51IGVtdWxhdGlvbiBieSBhIGxpc3Rib3ggaXMg
bm90IGdyZWF0LgorICAgIHRoaXMuX21vbnRoUG9wdXAgPSBjcmVhdGVFbGVtZW50KCdzZWxlY3Qn
LCBDbGFzcy5Nb250aFNlbGVjdG9yUG9wdXApOworICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZl
bnRMaXN0ZW5lcignY2hhbmdlJywgYmluZCh0aGlzLl9oYW5kbGVZZWFyTW9udGhDaGFuZ2UsIHRo
aXMpKTsKKyAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5fbW9udGhQb3B1cCk7CisgICAgdGhpcy5f
bW9udGggPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBDbGFzcy5Nb250aFNlbGVjdG9yKTsKKyAgICB0
aGlzLl9tb250aC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5fc2hvd1BvcHVw
LCB0aGlzKSk7CisgICAgYm94LmFwcGVuZENoaWxkKHRoaXMuX21vbnRoKTsKKworICAgIHRoaXMu
X2F0dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsKKyAgICBtYWluLmFwcGVuZENo
aWxkKG91dGVyQ29udGFpbmVyKTsKKworICAgIHRoaXMuX3dhbGwgPSBjcmVhdGVFbGVtZW50KCdk
aXYnLCBDbGFzcy5Nb250aFNlbGVjdG9yV2FsbCk7CisgICAgdGhpcy5fd2FsbC5hZGRFdmVudExp
c3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5fY2xvc2VQb3B1cCwgdGhpcykpOworICAgIG1haW4u
YXBwZW5kQ2hpbGQodGhpcy5fd2FsbCk7CisKKyAgICBnbG9iYWwuZmlyc3RGb2N1c2FibGVDb250
cm9sID0gdGhpcy5fbGVmdDI7IC8vIEZJWE1FOiBTaG91ZCBpdCBiZSB0aGlzLm1vbnRoPworfTsK
KworWWVhck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFyc0J1dHRvbnMgPSBmYWxzZTsKKworWWVh
ck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2F0dGFjaExlZnRCdXR0b25zVG8gPSBmdW5jdGlv
bihwYXJlbnQpIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ2xh
c3MuWWVhck1vbnRoQnV0dG9uTGVmdCk7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKGNvbnRhaW5l
cik7CisKKyAgICBpZiAoWWVhck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFyc0J1dHRvbnMpIHsK
KyAgICAgICAgdGhpcy5fbGVmdDMgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENsYXNzLlllYXJN
b250aEJ1dHRvbik7CisgICAgICAgIHRoaXMuX2xlZnQzLnR5cGUgPSAnYnV0dG9uJzsKKyAgICAg
ICAgdGhpcy5fbGVmdDMudmFsdWUgPSAnPDw8JzsKKyAgICAgICAgdGhpcy5fbGVmdDMuYWRkRXZl
bnRMaXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSk7
CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9sZWZ0Myk7CisgICAgfQorCisg
ICAgdGhpcy5fbGVmdDIgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENsYXNzLlllYXJNb250aEJ1
dHRvbik7CisgICAgdGhpcy5fbGVmdDIudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMuX2xlZnQy
LnZhbHVlID0gJzw8JzsKKyAgICB0aGlzLl9sZWZ0Mi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycs
IGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpKTsKKyAgICBjb250YWluZXIuYXBw
ZW5kQ2hpbGQodGhpcy5fbGVmdDIpOworCisgICAgdGhpcy5fbGVmdDEgPSBjcmVhdGVFbGVtZW50
KCdpbnB1dCcsIENsYXNzLlllYXJNb250aEJ1dHRvbik7CisgICAgdGhpcy5fbGVmdDEudHlwZSA9
ICdidXR0b24nOworICAgIHRoaXMuX2xlZnQxLnZhbHVlID0gJzwnOworICAgIHRoaXMuX2xlZnQx
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywg
dGhpcykpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9sZWZ0MSk7Cit9OworCitZ
ZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fYXR0YWNoUmlnaHRCdXR0b25zVG8gPSBmdW5j
dGlvbihwYXJlbnQpIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgnZGl2Jywg
Q2xhc3MuWWVhck1vbnRoQnV0dG9uUmlnaHQpOworICAgIHBhcmVudC5hcHBlbmRDaGlsZChjb250
YWluZXIpOworICAgIHRoaXMuX3JpZ2h0MSA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ2xhc3Mu
WWVhck1vbnRoQnV0dG9uKTsKKyAgICB0aGlzLl9yaWdodDEudHlwZSA9ICdidXR0b24nOworICAg
IHRoaXMuX3JpZ2h0MS52YWx1ZSA9ICc+JzsKKyAgICB0aGlzLl9yaWdodDEuYWRkRXZlbnRMaXN0
ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSk7CisgICAg
Y29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JpZ2h0MSk7CisKKyAgICB0aGlzLl9yaWdodDIg
PSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENsYXNzLlllYXJNb250aEJ1dHRvbik7CisgICAgdGhp
cy5fcmlnaHQyLnR5cGUgPSAnYnV0dG9uJzsKKyAgICB0aGlzLl9yaWdodDIudmFsdWUgPSAnPj4n
OworICAgIHRoaXMuX3JpZ2h0Mi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5f
aGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhp
cy5fcmlnaHQyKTsKKworICAgIGlmIChZZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJzQnV0
dG9ucykgeworICAgICAgICB0aGlzLl9yaWdodDMgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENs
YXNzLlllYXJNb250aEJ1dHRvbik7CisgICAgICAgIHRoaXMuX3JpZ2h0My50eXBlID0gJ2J1dHRv
bic7CisgICAgICAgIHRoaXMuX3JpZ2h0My52YWx1ZSA9ICc+Pj4nOworICAgICAgICB0aGlzLl9y
aWdodDMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNs
aWNrLCB0aGlzKSk7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDMp
OworICAgIH0KK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnllYXIgPSBmdW5j
dGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5fY3VycmVudFllYXI7Cit9OworCitZZWFyTW9udGhD
b250cm9sbGVyLnByb3RvdHlwZS5tb250aCA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlz
Ll9jdXJyZW50TW9udGg7Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5zZXRZ
ZWFyTW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgeworICAgIHRoaXMuX2N1cnJlbnRZZWFy
ID0geWVhcjsKKyAgICB0aGlzLl9jdXJyZW50TW9udGggPSBtb250aDsKKyAgICB0aGlzLl9yZWRy
YXcoKTsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9yZWRyYXcgPSBmdW5j
dGlvbigpIHsKKyAgICB2YXIgbWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFy
KCkgKiAxMiArIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgIHZhciBtYXgg
PSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1heGlt
dW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50WWVh
ciAqIDEyICsgdGhpcy5fY3VycmVudE1vbnRoOworICAgIGlmICh0aGlzLl9sZWZ0MykKKyAgICAg
ICAgdGhpcy5fbGVmdDMuZGlzYWJsZWQgPSBjdXJyZW50IC0gMTMgPCBtaW47CisgICAgdGhpcy5f
bGVmdDIuZGlzYWJsZWQgPSBjdXJyZW50IC0gMiA8IG1pbjsKKyAgICB0aGlzLl9sZWZ0MS5kaXNh
YmxlZCA9IGN1cnJlbnQgLSAxIDwgbWluOworICAgIHRoaXMuX3JpZ2h0MS5kaXNhYmxlZCA9IGN1
cnJlbnQgKyAxID4gbWF4OworICAgIHRoaXMuX3JpZ2h0Mi5kaXNhYmxlZCA9IGN1cnJlbnQgKyAy
ID4gbWF4OworICAgIGlmICh0aGlzLl9yaWdodDMpCisgICAgICAgIHRoaXMuX3JpZ2h0My5kaXNh
YmxlZCA9IGN1cnJlbnQgKyAxMyA+IG1heDsKKyAgICB0aGlzLl9tb250aC5pbm5lclRleHQgPSBm
b3JtYXRZZWFyTW9udGgodGhpcy5fY3VycmVudFllYXIsIHRoaXMuX2N1cnJlbnRNb250aCk7Cisg
ICAgd2hpbGUgKHRoaXMuX21vbnRoUG9wdXAuaGFzQ2hpbGROb2RlcygpKQorICAgICAgICB0aGlz
Ll9tb250aFBvcHVwLnJlbW92ZUNoaWxkKHRoaXMuX21vbnRoUG9wdXAuZmlyc3RDaGlsZCk7Cisg
ICAgZm9yICh2YXIgbSA9IGN1cnJlbnQgLSA2OyBtIDw9IGN1cnJlbnQgKyA2OyBtKyspIHsKKyAg
ICAgICAgaWYgKG0gPCBtaW4gfHwgbSA+IG1heCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB2YXIgb3B0aW9uID0gY3JlYXRlRWxlbWVudCgnb3B0aW9uJywgdW5kZWZpbmVkLCBmb3Jt
YXRZZWFyTW9udGgoTWF0aC5mbG9vcihtIC8gMTIpLCBtICUgMTIpKTsKKyAgICAgICAgb3B0aW9u
LnZhbHVlID0gU3RyaW5nKE1hdGguZmxvb3IobSAvIDEyKSkgKyAnLScgKyBTdHJpbmcobSAlIDEy
KTsKKyAgICAgICAgdGhpcy5fbW9udGhQb3B1cC5hcHBlbmRDaGlsZChvcHRpb24pOworICAgICAg
ICBpZiAobSA9PSBjdXJyZW50KQorICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTsK
KyAgICB9Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fc2hvd1BvcHVwID0g
ZnVuY3Rpb24oKSB7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zaXplID0gTWF0aC5tYXgoNCwgTWF0
aC5taW4oMTAsIHRoaXMuX21vbnRoUG9wdXAubGVuZ3RoKSk7CisgICAgdGhpcy5fbW9udGhQb3B1
cC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICB0aGlzLl9tb250aFBvcHVwLnN0eWxlLnBv
c2l0aW9uID0gJ2Fic29sdXRlJzsKKyAgICB0aGlzLl9tb250aFBvcHVwLnN0eWxlLnpJbmRleCA9
ICcxMDAwJzsgLy8gTGFyZ2VyIHRoYW4gdGhlIGRheXMgYXJlYS4KKyAgICB0aGlzLl9tb250aFBv
cHVwLnN0eWxlLmxlZnQgPSB0aGlzLl9tb250aC5vZmZzZXRMZWZ0ICsgJ3B4JzsKKyAgICB0aGlz
Ll9tb250aFBvcHVwLnN0eWxlLnRvcCA9IHRoaXMuX21vbnRoLm9mZnNldFRvcCArIHRoaXMuX21v
bnRoLm9mZnNldEhlaWdodCArICdweCc7CisgICAgdGhpcy5fbW9udGhQb3B1cC5mb2N1cygpOwor
CisgICAgdGhpcy5fd2FsbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKKyAgICB0aGlzLl93YWxs
LnN0eWxlLnpJbmRleCA9ICc5OTknOyAvLyBUaGlzIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhl
IHotaW5kZXggb2YgbW9udGhQb3B1cC4KK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90
eXBlLl9jbG9zZVBvcHVwID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHls
ZS5kaXNwbGF5ID0gJ25vbmUnOworICAgIHRoaXMuX3dhbGwuc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVZZWFyTW9udGhD
aGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9jbG9zZVBvcHVwKCk7CisKKyAgICB2YXIg
cmVzdWx0ID0gdGhpcy5fbW9udGhQb3B1cC52YWx1ZS5tYXRjaCgvKFxkKyktKFxkKykvKTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBuZXdZZWFyID0gTnVtYmVy
KHJlc3VsdFsxXSk7CisgICAgdmFyIG5ld01vbnRoID0gTnVtYmVyKHJlc3VsdFsyXSk7CisgICAg
aWYgKG5ld1llYXIgPT0gZ2xvYmFsLmxhc3RZZWFyICYmIG5ld01vbnRoID09IGdsb2JhbC5sYXN0
TW9udGgpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogbmF2aWdhdGVUb01vbnRoV2l0
aEFuaW1hdGlvbigpIHNob3VsZCBoYW5kbGUgQ2xhc3MuU0xFQ1RFRD8KKyAgICBuYXZpZ2F0ZVRv
TW9udGhXaXRoQW5pbWF0aW9uKG5ld1llYXIsIG5ld01vbnRoKTsKKyAgICBpZiAoZ2xvYmFsLmxh
c3RZID4gMCAmJiBnbG9iYWwubGFzdFggPiAwKQorICAgICAgICBnbG9iYWwuZGF5c1tnbG9iYWwu
bGFzdFldW2dsb2JhbC5sYXN0WF0uY2xhc3NMaXN0LmFkZChDbGFzcy5TZWxlY3RlZCk7Cit9Owor
CitZZWFyTW9udGhDb250cm9sbGVyLl9QcmV2aW91c1RlblllYXJzID0gLTEyMDsKK1llYXJNb250
aENvbnRyb2xsZXIuX1ByZXZpb3VzWWVhciA9IC0xMjsKK1llYXJNb250aENvbnRyb2xsZXIuX1By
ZXZpb3VzTW9udGggPSAtMTsKK1llYXJNb250aENvbnRyb2xsZXIuX05leHRNb250aCA9IDE7CitZ
ZWFyTW9udGhDb250cm9sbGVyLl9OZXh0WWVhciA9IDEyOworWWVhck1vbnRoQ29udHJvbGxlci5f
TmV4dFRlblllYXJzID0gMTIwOworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFu
ZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQg
PT0gdGhpcy5fbGVmdDMpCisgICAgICAgIHRoaXMuX21vdmVSZWxhdGl2ZWx5KFllYXJNb250aENv
bnRyb2xsZXIuX1ByZXZpb3VzVGVuWWVhcnMpOworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9
PSB0aGlzLl9sZWZ0MikKKyAgICAgICAgdGhpcy5fbW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29u
dHJvbGxlci5fUHJldmlvdXNZZWFyKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhp
cy5fbGVmdDEpCisgICAgICAgIHRoaXMuX21vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xs
ZXIuX1ByZXZpb3VzTW9udGgpOworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9y
aWdodDEpCisgICAgICAgIHRoaXMuX21vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIu
X05leHRNb250aCkKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQyKQor
ICAgICAgICB0aGlzLl9tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLl9OZXh0WWVh
cik7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuX3JpZ2h0MykKKyAgICAgICAg
dGhpcy5fbW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5fTmV4dFRlblllYXJzKTsK
KyAgICBlbHNlCisgICAgICAgIHJldHVybjsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJv
dG90eXBlLl9tb3ZlUmVsYXRpdmVseSA9IGZ1bmN0aW9uKGFtb3VudCkgeworICAgIHZhciBtaW4g
PSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmlt
dW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFyIG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsK
KyAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50
TW9udGg7CisgICAgdmFyIHVwZGF0ZWQgPSBjdXJyZW50OworICAgIGlmIChhbW91bnQgPCAwKSB7
CisgICAgICAgIHVwZGF0ZWQgPSBjdXJyZW50ICsgYW1vdW50ID49IG1pbiA/IGN1cnJlbnQgKyBh
bW91bnQgOiBtaW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBh
bW91bnQgPD0gbWF4ID8gY3VycmVudCArIGFtb3VudCA6IG1heDsKKyAgICB9CisgICAgaWYgKHVw
ZGF0ZWQgPT0gY3VycmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIG5hdmlnYXRlVG9Nb250aFdp
dGhBbmltYXRpb24oTWF0aC5mbG9vcih1cGRhdGVkIC8gMTIpLCB1cGRhdGVkICUgMTIpOworICAg
IGlmIChnbG9iYWwubGFzdFkgPiAwICYmIGdsb2JhbC5sYXN0WCA+IDApCisgICAgICAgIGdsb2Jh
bC5kYXlzW2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QuYWRkKENsYXNzLlNl
bGVjdGVkKTsKK307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZnVuY3Rpb24gc3RlcE1pc21hdGNoKHRpbWUp
IHsKKyAgICByZXR1cm4gKHRpbWUgLSBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpKSAlIGds
b2JhbC5zdGVwICE9IDA7Cit9CisKK2Z1bmN0aW9uIG91dE9mUmFuZ2UodGltZSkgeworICAgIHJl
dHVybiB0aW1lIDwgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFRpbWUoKSB8fCB0aW1lID4gZ2xvYmFs
Lm1heGltdW1EYXRlLmdldFRpbWUoKTsKK30KKworZnVuY3Rpb24gaXNWYWxpZERhdGUodGltZSkg
eworICAgIHJldHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAhc3RlcE1pc21hdGNoKHRpbWUpOwor
fQorCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0ge251bWJlcn0gbW9u
dGgKKyAqLworZnVuY3Rpb24gcmVuZGVyTW9udGgoeWVhciwgbW9udGgpIHsKKyAgICBnbG9iYWwu
bGFzdFllYXIgPSB5ZWFyOworICAgIGdsb2JhbC5sYXN0TW9udGggPSBtb250aDsKKyAgICB2YXIg
ZGF5SXRlcmF0b3IgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSkpOworICAgIGRh
eUl0ZXJhdG9yLnNldFVUQ0Z1bGxZZWFyKHllYXIpOworICAgIHZhciBtb250aFN0YXJ0RGF5ID0g
ZGF5SXRlcmF0b3IuZ2V0VVRDRGF5KCk7CisgICAgdmFyIHdlZWtTdGFydERheSA9IGdsb2JhbC5w
YXJhbXMud2Vla1N0YXJ0RGF5IHx8IDA7CisgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gd2Vla1N0YXJ0
RGF5IC0gbW9udGhTdGFydERheTsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPj0gMCkKKyAgICAgICAg
c3RhcnRPZmZzZXQgLT0gNzsKKyAgICBkYXlJdGVyYXRvci5zZXRVVENEYXRlKHN0YXJ0T2Zmc2V0
ICsgMSk7CisgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBXZWVrczsgdysrKSB7CisgICAgICAgIGZv
ciAodmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICB2YXIgaXRlclllYXIgPSBk
YXlJdGVyYXRvci5nZXRVVENGdWxsWWVhcigpOworICAgICAgICAgICAgdmFyIGl0ZXJNb250aCA9
IGRheUl0ZXJhdG9yLmdldFVUQ01vbnRoKCk7CisgICAgICAgICAgICB2YXIgdGltZSA9IGRheUl0
ZXJhdG9yLmdldFRpbWUoKTsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZ2xvYmFsLmRheXNb
d11bZF07CisgICAgICAgICAgICAvLyBGSVhNRTogTmVlZCBsb2NhbGl6ZWQgbnVtYmVyPworICAg
ICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0
ZSgpKTsKKyAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ2xhc3MuRGF5OworICAgICAg
ICAgICAgZWxlbWVudC5kYXRhc2V0LnN1Ym1pdFZhbHVlID0gY3JlYXRlRGF0ZVN0cmluZyhpdGVy
WWVhciwgaXRlck1vbnRoLCBkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOworICAgICAgICAgICAg
aWYgKG91dE9mUmFuZ2UodGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoQ2xhc3MuVW5hdmFpbGFibGUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwTWlz
bWF0Y2godGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xh
c3MuVW5hdmFpbGFibGUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0geWVh
ciAmJiBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpIDwgbW9udGgpIHx8IChtb250aCA9PSAwICYm
IGl0ZXJNb250aCA9PSAxMSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5h
ZGQoQ2xhc3MuQXZhaWxhYmxlKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5h
ZGQoQ2xhc3MuTm90VGhpc01vbnRoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGl0ZXJZZWFy
ID09IHllYXIgJiYgZGF5SXRlcmF0b3IuZ2V0VVRDTW9udGgoKSA+IG1vbnRoKSB8fCAobW9udGgg
PT0gMTEgJiYgaXRlck1vbnRoID09IDApKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkKENsYXNzLkF2YWlsYWJsZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkKENsYXNzLk5vdFRoaXNNb250aCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
TmFOKHRpbWUpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSAnLSc7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzLlVuYXZhaWxhYmxlKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKENsYXNzLkF2YWlsYWJsZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXlJdGVy
YXRvci5zZXRVVENEYXRlKGRheUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSArIDEpOworICAgICAgICB9
CisgICAgfQorCisgICAgZ2xvYmFsLnRvZGF5LmRpc2FibGVkID0gIWlzVmFsaWREYXRlKGNyZWF0
ZURhdGVGcm9tU3RyaW5nKCkuZ2V0VGltZSgpKTsKK30KKworLyoqCisgKiBAcGFyYW0ge251bWJl
cn0geWVhcgorICogQHBhcmFtIHtudW1iZXJ9IG1vbnRoCisgKi8KK2Z1bmN0aW9uIG5hdmlnYXRl
VG9Nb250aCh5ZWFyLCBtb250aCkgeworICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLnNl
dFllYXJNb250aCh5ZWFyLCBtb250aCk7CisgICAgcmVuZGVyTW9udGgoeWVhciwgbW9udGgpOwor
fQorCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0ge251bWJlcn0gbW9u
dGgKKyAqIEBwYXJhbSB7Ym9vbGVhbn0gcmlnaHQgZmFsc2U6bGVmdCwgdHJ1ZTpyaWdodAorICov
CitmdW5jdGlvbiBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKSB7Cisg
ICAgaWYgKGdsb2JhbC5sYXN0WWVhciA+PSAwICYmIGdsb2JhbC5sYXN0TW9udGggPj0gMCkgewor
ICAgICAgICBpZiAoeWVhciA9PSBnbG9iYWwubGFzdFllYXIgJiYgbW9udGggPT0gZ2xvYmFsLmxh
c3RNb250aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGRlY3JlYXNpbmcgPSBm
YWxzZTsKKyAgICAgICAgaWYgKHllYXIgPCBnbG9iYWwubGFzdFllYXIpIHsKKyAgICAgICAgICAg
IGRlY3JlYXNpbmcgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKHllYXIgPiBnbG9iYWwubGFz
dFllYXIpIHsKKyAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBtb250aCA8IGdsb2JhbC5sYXN0TW9udGg7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIGRheXNTdHlsZSA9IGdsb2JhbC5kYXlzQXJlYS5zdHlsZTsK
KyAgICAgICAgZ2xvYmFsLmRheXNBcmVhLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRp
b25FbmQnLCBtb3ZlSW5EYXlzKTsKKyAgICAgICAgZGF5c1N0eWxlLnBvc2l0aW9uID0gJ3JlbGF0
aXZlJzsKKyAgICAgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnbGVmdCAwLjFzIGVh
c2UnOworICAgICAgICBkYXlzU3R5bGUubGVmdCA9IChkZWNyZWFzaW5nID8gJycgOiAnLScpICsg
Z2xvYmFsLmRheXNBcmVhLm9mZnNldFdpZHRoICsgJ3B4JzsKKyAgICB9CisgICAgbmF2aWdhdGVU
b01vbnRoKHllYXIsIG1vbnRoKTsKK30KKworZnVuY3Rpb24gbW92ZUluRGF5cygpIHsKKyAgICB2
YXIgZGF5c1N0eWxlID0gZ2xvYmFsLmRheXNBcmVhLnN0eWxlOworICAgIGdsb2JhbC5kYXlzQXJl
YS5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgbW92ZUluRGF5cyk7
CisgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnJzsKKyAgICBkYXlzU3R5bGUubGVm
dCA9IChkYXlzU3R5bGUubGVmdC5jaGFyQXQoMCkgPT0gJy0nID8gJycgOiAnLScpICsgZ2xvYmFs
LmRheXNBcmVhLm9mZnNldFdpZHRoICsgJ3B4JzsKKyAgICBnbG9iYWwuZGF5c0FyZWEub2Zmc2V0
TGVmdDsgLy8gRm9yY2UgdG8gbGF5b3V0LgorICAgIGRheXNTdHlsZS53ZWJraXRUcmFuc2l0aW9u
ID0gJ2xlZnQgMC4xcyBlYXNlJzsKKyAgICBkYXlzU3R5bGUubGVmdCA9ICcwcHgnOworfQorCisv
KioKKyAqIEBwYXJhbSB7RGF0ZX0gZGF0ZQorICovCitmdW5jdGlvbiBzZWxlY3REYXRlKGRhdGUp
IHsKKyAgICBuYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKGRhdGUuZ2V0VVRDRnVsbFllYXIo
KSwgZGF0ZS5nZXRVVENNb250aCgpKTsKKyAgICB2YXIgZGF0ZVN0cmluZyA9IGNyZWF0ZURhdGVT
dHJpbmcoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0
VVRDRGF0ZSgpKTsKKyAgICBmb3IgKHZhciB3ID0gMDsgdyA8IFdlZWtzOyB3KyspIHsKKyAgICAg
ICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIGlmIChnbG9iYWwu
ZGF5c1t3XVtkXS5kYXRhc2V0LnN1Ym1pdFZhbHVlID09IGRhdGVTdHJpbmcpIHsKKyAgICAgICAg
ICAgICAgICBnbG9iYWwuZGF5c1t3XVtkXS5jbGFzc0xpc3QuYWRkKENsYXNzLlNlbGVjdGVkKTsK
KyAgICAgICAgICAgICAgICBnbG9iYWwubGFzdFggPSBkOworICAgICAgICAgICAgICAgIGdsb2Jh
bC5sYXN0WSA9IHc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIG1heWJlU2V0UHJldmlvdXNNb250aCgpIHsKKyAg
ICB2YXIgeWVhciA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLnllYXIoKTsKKyAgICB2YXIg
bW9udGggPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb250aCgpOworICAgIHZhciB0aGlz
TW9udGhTdGFydFRpbWUgPSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSk7CisgICAgaWYgKGdsb2Jh
bC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgPj0gdGhpc01vbnRoU3RhcnRUaW1lKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1vbnRoID09IDApIHsKKyAgICAgICAgeWVhci0tOworICAg
ICAgICBtb250aCA9IDExOworICAgIH0gZWxzZSB7CisgICAgICAgIG1vbnRoLS07CisgICAgfQor
ICAgIG5hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgpOworICAgIHJldHVy
biB0cnVlOworfQorCitmdW5jdGlvbiBtYXliZVNldE5leHRNb250aCgpIHsKKyAgICB2YXIgeWVh
ciA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLnllYXIoKTsKKyAgICB2YXIgbW9udGggPSBn
bG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb250aCgpOworICAgIGlmIChtb250aCA9PSAxMSkg
eworICAgICAgICB5ZWFyKys7CisgICAgICAgIG1vbnRoID0gMDsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtb250aCsrOworICAgIH0KKyAgICB2YXIgbmV4dE1vbnRoU3RhcnRUaW1lID0gRGF0ZS5V
VEMoeWVhciwgbW9udGgsIDEpOworICAgIGlmIChnbG9iYWwubWF4aW11bURhdGUuZ2V0VGltZSgp
IDwgbmV4dE1vbnRoU3RhcnRUaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbmF2aWdh
dGVUb01vbnRoV2l0aEFuaW1hdGlvbih5ZWFyLCBtb250aCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKKy8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gaGFuZGxlRGF5
Q2xpY2soZXZlbnQpIHsKKyAgICB2YXIgeWVhciA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVy
LnllYXIoKTsKKyAgICB2YXIgbW9udGggPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb250
aCgpOworICAgIHZhciBjbGFzc0xpc3QgPSBldmVudC50YXJnZXQuY2xhc3NMaXN0OworICAgIGlm
IChjbGFzc0xpc3QuY29udGFpbnMoQ2xhc3MuVW5hdmFpbGFibGVVcCkpIHsKKyAgICAgICAgbWF5
YmVTZXRQcmV2aW91c01vbnRoKCk7CisgICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMo
Q2xhc3MuVW5hdmFpbGFibGVEb3duKSkgeworICAgICAgICBtYXliZVNldE5leHRNb250aCgpOwor
ICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzLkF2YWlsYWJsZSkpIHsKKyAg
ICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0VmFsdWUpOworICAg
IH0KK30KKworLyoqCisgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9u
IGhhbmRsZU1vdXNlT3ZlcihldmVudCkgeworICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0Owor
ICAgIGlmIChnbG9iYWwubGFzdFggPj0gMCAmJiBnbG9iYWwubGFzdFkgPj0gMCkKKyAgICAgICAg
Z2xvYmFsLmRheXNbZ2xvYmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUo
Q2xhc3MuU2VsZWN0ZWQpOworICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3Mu
RGF5KSkgeworICAgICAgICBnbG9iYWwubGFzdFggPSAtMTsKKyAgICAgICAgZ2xvYmFsLmxhc3RZ
ID0gLTE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbm9kZS5jbGFzc0xpc3QuYWRkKENs
YXNzLlNlbGVjdGVkKTsKKyAgICBnbG9iYWwubGFzdFggPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBv
c2l0aW9uWCk7CisgICAgZ2xvYmFsLmxhc3RZID0gTnVtYmVyKG5vZGUuZGF0YXNldC5wb3NpdGlv
blkpOworfQorCisvKioKKyAqLworZnVuY3Rpb24gaGFuZGxlTW91c2VPdXQoZXZlbnQpIHsKKyAg
ICBpZiAoZ2xvYmFsLmxhc3RYID49IDAgJiYgZ2xvYmFsLmxhc3RZID49IDApCisgICAgICAgIGds
b2JhbC5kYXlzW2dsb2JhbC5sYXN0WV1bZ2xvYmFsLmxhc3RYXS5jbGFzc0xpc3QucmVtb3ZlKENs
YXNzLlNlbGVjdGVkKTsKKyAgICBnbG9iYWwubGFzdFggPSAtMTsKKyAgICBnbG9iYWwubGFzdFkg
PSAtMTsKK30KKworLyoqCisgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50CisgKi8KK2Z1
bmN0aW9uIGhhbmRsZURheXNBcmVhS2V5KGV2ZW50KSB7CisgICAgbWF5YmVVcGRhdGVGb2N1c1N0
eWxlKCk7CisgICAgdmFyIHggPSBnbG9iYWwubGFzdFg7CisgICAgdmFyIHkgPSBnbG9iYWwubGFz
dFk7CisgICAgdmFyIGxvY2F0ZWQgPSB4ID49IDAgJiYgeSA+PSAgMDsKKyAgICB2YXIga2V5ID0g
ZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICBpZiAoIWxvY2F0ZWQgJiYgKGtleSA9PSAnTGVmdCcg
fHwga2V5ID09ICdVcCcgfHwga2V5ID09ICdSaWdodCcgfHwga2V5ID09ICdEb3duJykpIHsKKyAg
ICAgICAgLy8gUHV0IHRoZSBzZWxlY3Rpb24gb24gYSBjZW50ZXIgY2VsbC4KKyAgICAgICAgdXBk
YXRlU2VsZWN0aW9uKGV2ZW50LCAzLCBNYXRoLmZsb29yKFdlZWtzIC8gMiAtIDEpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXkgPT0gJ0xlZnQnKSB7CisgICAgICAgIGlm
ICh4ID09IDApIHsKKyAgICAgICAgICAgIGlmICh5ID09IDApIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgeSA9IFdlZWtzIC0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgeS0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeCA9IDY7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4LS07CisgICAgICAgIH0KKyAgICAgICAgdXBk
YXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAnVXAnKSB7
CisgICAgICAgIGlmICh5ID09IDApIHsKKyAgICAgICAgICAgIGlmICghbWF5YmVTZXRQcmV2aW91
c01vbnRoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgeSA9IFdlZWtz
IC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHktLTsKKyAgICAgICAgfQorICAg
ICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgIH0gZWxzZSBpZiAoa2V5ID09
ICdSaWdodCcpIHsKKyAgICAgICAgaWYgKHggPT0gNikgeworICAgICAgICAgICAgaWYgKHkgPT0g
V2Vla3MgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtYXliZVNldE5leHRNb250aCgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgeSA9IDA7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHkrKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHggPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCsrOworICAg
ICAgICB9CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgfSBlbHNl
IGlmIChrZXkgPT0gJ0Rvd24nKSB7CisgICAgICAgIGlmICh5ID09IFdlZWtzIC0gMSkgeworICAg
ICAgICAgICAgaWYgKCFtYXliZVNldE5leHRNb250aCgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeSsr
OworICAgICAgICB9CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAg
fSBlbHNlIGlmIChrZXkgPT0gJ1BhZ2VVcCcpIHsKKyAgICAgICAgaWYgKCFtYXliZVNldFByZXZp
b3VzTW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdXBkYXRlU2VsZWN0aW9u
KGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAnUGFnZURvd24nKSB7CisgICAg
ICAgIGlmICghbWF5YmVTZXROZXh0TW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGxvY2F0ZWQg
JiYga2V5ID09ICdFbnRlcicpIHsKKyAgICAgICAgdmFyIGRheU5vZGUgPSBnbG9iYWwuZGF5c1t5
XVt4XTsKKyAgICAgICAgaWYgKGRheU5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzLkF2YWls
YWJsZSkpIHsKKyAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJtaXRW
YWx1ZSk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfSBl
bHNlIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzcy5VbmF2YWlsYWJsZVVwKSkg
eworICAgICAgICAgICAgbWF5YmVTZXRQcmV2aW91c01vbnRoKCk7CisgICAgICAgICAgICB1cGRh
dGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworICAgICAgICB9IGVsc2UgaWYgKGRheU5vZGUuY2xh
c3NMaXN0LmNvbnRhaW5zKENsYXNzLlVuYXZhaWxhYmxlRG93bikpIHsKKyAgICAgICAgICAgIG1h
eWJlU2V0TmV4dE1vbnRoKCk7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgs
IHkpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ1UrMDA1NCcpIHsgLy8gJ3Qn
ICBGSVhNRTogbW92ZSB0byBnbG9iYWwgaGFuZGxlci4KKyAgICAgICAgZ2xvYmFsLmRheXNbZ2xv
YmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3MuU2VsZWN0ZWQp
OworICAgICAgICBzZWxlY3REYXRlKG5ldyBEYXRlKCkpOworICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSkgeworICAgIGlmIChnbG9iYWwu
bGFzdFggPj0gMCAmJiBnbG9iYWwubGFzdFkgPj0gMCkKKyAgICAgICAgZ2xvYmFsLmRheXNbZ2xv
YmFsLmxhc3RZXVtnbG9iYWwubGFzdFhdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3MuU2VsZWN0ZWQp
OworICAgIGlmICh4ID49IDAgJiYgeSA+PSAwKSB7CisgICAgICAgIGdsb2JhbC5kYXlzW3ldW3hd
LmNsYXNzTGlzdC5hZGQoQ2xhc3MuU2VsZWN0ZWQpOworICAgICAgICBnbG9iYWwubGFzdFggPSB4
OworICAgICAgICBnbG9iYWwubGFzdFkgPSB5OworICAgIH0KKyAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorCisvKioKKyAqIEBwYXJh
bSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0ge251bWJlcn0gbW9udGgKKyAqIEBwYXJhbSB7bnVt
YmVyfSBkYXkKKyAqIEByZXR1cm4ge3N0cmluZ30KKyAqLworZnVuY3Rpb24gY3JlYXRlRGF0ZVN0
cmluZyh5ZWFyLCBtb250aCwgZGF5KSB7CisgICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmcoeWVh
cik7CisgICAgaWYgKHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9
ICgnMDAwJyArIHllYXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJp
bmcgKyAnLScgKyAoJzAnICsgKG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAnLScgKyAoJzAn
ICsgZGF5KS5zdWJzdHIoLTIsIDIpCit9CisKK2Z1bmN0aW9uIGhhbmRsZVRvZGF5KCkgeworICAg
IHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICBzZWxlY3REYXRlKGRhdGUpOworICAgIHN1Ym1p
dFZhbHVlKGNyZWF0ZURhdGVTdHJpbmcoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRo
KCksIGRhdGUuZ2V0RGF0ZSgpKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUNsZWFyKCkgeworICAg
IHN1Ym1pdFZhbHVlKCcnKTsKK30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKKyAq
LworZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKKyAgICB3aW5kb3cuc2V0VmFsdWVBbmRD
bG9zZVBvcHVwKDAsIHZhbHVlKTsKK30KKworZnVuY3Rpb24gaGFuZGxlQ2FuY2VsKCkgeworICAg
IHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICcnKTsKK30KKworLyoqCisgKiBAcGFy
YW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZUdsb2JhbEtleShl
dmVudCkgeworICAgIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpOworICAgIHZhciBrZXkgPSBldmVu
dC5rZXlJZGVudGlmaWVyOworICAgIGlmIChrZXkgPT0gJ1UrMDAwOScpIHsKKyAgICAgICAgaWYg
KCFldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2JhbC5sYXN0
Rm9jdXNhYmxlQ29udHJvbCkgeworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7
CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZ2xvYmFs
LmZpcnN0Rm9jdXNhYmxlQ29udHJvbC5mb2N1cygpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50
LnNoaWZ0S2V5ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZ2xvYmFsLmZpcnN0Rm9jdXNh
YmxlQ29udHJvbCkgeworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAg
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZ2xvYmFsLmxhc3RG
b2N1c2FibGVDb250cm9sLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtleSA9
PSAnVSswMDREJykgeyAvLyBtCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1v
dmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5QUkVWSU9V
U19NT05USCA6IFllYXJNb250aENvbnRyb2xsZXIuTkVYVF9NT05USCk7CisgICAgfSBlbHNlIGlm
IChrZXkgPT0gJ1UrMDA1OScpIHsgLy8geQorICAgICAgICBnbG9iYWwueWVhck1vbnRoQ29udHJv
bGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRyb2xsZXIu
UFJFVklPVVNfWUVBUiA6IFllYXJNb250aENvbnRyb2xsZXIuTkVYVF9ZRUFSKTsKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAnVSswMDQ0JykgeyAvLyBkCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhD
b250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJv
bGxlci5QUkVWSU9VU18xMFlFQVJTIDogWWVhck1vbnRoQ29udHJvbGxlci5ORVhUXzEwWUVBUlMp
OworICAgIH0KK30KKworZnVuY3Rpb24gbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCkgeworICAgIGlm
IChnbG9iYWwuaGFkS2V5RXZlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwuaGFkS2V5
RXZlbnQgPSB0cnVlOworICAgICQoJ21haW4nKS5jbGFzc0xpc3QucmVtb3ZlKENsYXNzLk5vRm9j
dXNSaW5nKTsKK30KKworaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKKyAgICBpbml0aWFs
aXplKGRpYWxvZ0FyZ3VtZW50cyk7Cit9IGVsc2UgeworICAgIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCdtZXNzYWdlJywgaGFuZGxlTWVzc2FnZSwgZmFsc2UpOworICAgIHdpbmRvdy5zZXRUaW1l
b3V0KGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cC9XZWJDb3JlLmd5cAppbmRleCBjMWQ5NzU3NzY0YTRkYjBjMzJiZjVhY2UwNGNmODE2MGZh
YmVhMTQwLi40ZGMxOTA5MmZhMGZiYzRlMTQ3NzU3NDUyYTMxOWVjMDJjNjRjNWVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtODQxLDYgKzg0MSwyNSBAQAogICAg
ICAgICAgIF0sCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUn
OiAnQ2FsZW5kYXJQaWNrZXInLAorICAgICAgICAgICdpbnB1dHMnOiBbCisgICAgICAgICAgICAn
Li4vUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzcycsCisgICAgICAgICAgICAnLi4vUmVzb3Vy
Y2VzL2NhbGVuZGFyUGlja2VyLmpzJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdvdXRwdXRz
JzogWworICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxl
bmRhclBpY2tlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93
ZWJraXQvQ2FsZW5kYXJQaWNrZXIuY3BwJywKKyAgICAgICAgICBdLAorICAgICAgICAgICdhY3Rp
b24nOiBbCisgICAgICAgICAgICAncHl0aG9uJywKKyAgICAgICAgICAgICcuLi9tYWtlLWZpbGUt
YXJyYXlzLnB5JywKKyAgICAgICAgICAgICctLWNvbmRpdGlvbj1FTkFCTEUoQ0FMRU5EQVJfUElD
S0VSKScsCisgICAgICAgICAgICAnLS1vdXQtaD08KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93
ZWJraXQvQ2FsZW5kYXJQaWNrZXIuaCcsCisgICAgICAgICAgICAnLS1vdXQtY3BwPTwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5jcHAnLAorICAgICAgICAg
ICAgJzxAKF9pbnB1dHMpJywKKyAgICAgICAgICBdLAorICAgICAgICB9LAorICAgICAgICB7CiAg
ICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ1hMaW5rTmFtZXMnLAogICAgICAgICAgICdpbnB1dHMn
OiBbCiAgICAgICAgICAgICAnLi4vZG9tL21ha2VfbmFtZXMucGwnLApAQCAtMTA3Nyw2ICsxMDk2
LDcgQEAKICAgICAgICAgIyBBZGRpdGlvbmFsIC5jcHAgZmlsZXMgZnJvbSB3ZWJjb3JlX2JpbmRp
bmdzX3NvdXJjZXMgYWN0aW9ucy4KICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmtpdC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9IVE1MTmFtZXMuY3BwJywKKyAgICAgICAgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5jcHAnLAogICAgICAgICAnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0V2ZW50RmFjdG9yeS5jcHAnLAogICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0V2ZW50SGVhZGVycy5oJywKICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9FdmVudEludGVyZmFjZXMu
aCcsCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggNTM3OGEwN2M2M2Mw
YzQ2MmU4NTY5ZDZlZjY5ZDc5OTZmMmMyZmJjYi4uNWU5ZWM5YmQ5NmQ1YzViNmNiNDY5MzhhNTYz
M2JkYjhjMGQ2MTMyYyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDEyLTA0LTAzICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBBZGQgSmF2YVNjcmlwdCBhbmQgQ1NTIGNvZGUgZm9yIHRoZSBjYWxlbmRh
ciBwaWNrZXIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTgzMDExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBNYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbDog
QWRkZWQuCisKIDIwMTItMDQtMDIgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtRdF1bV0syXSBTZXQgdXAgcGx1Z2luIHByb2Nlc3Mgb24gVW5peApkaWZm
IC0tZ2l0IGEvTWFudWFsVGVzdHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0bWwgYi9NYW51YWxU
ZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDI1ZTg4OTZkMjAy
ZjVjMjgxMTdhMWRhODcwMzA4NThhYjNhOWI0Ci0tLSAvZGV2L251bGwKKysrIGIvTWFudWFsVGVz
dHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0bWwKQEAgLTAsMCArMSw4MiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzx0aXRsZT5DYWxl
bmRhciBQaWNrZXIgdGVzdDwvdGl0bGU+Cis8c3R5bGU+Citib2R5IHsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZWVmZmZmOworfQoraWZyYW1lIHsKKyAgICB6LWluZGV4OiAyMTQ3NDgzNjQ3Owor
ICAgIHdpZHRoOiAyOTBweDsKKyAgICBoZWlnaHQ6IDI1NnB4OworICAgIGJvcmRlcjogMDsKKyAg
ICBvdmVyZmxvdzogaGlkZGVuOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8cD5U
aGlzIGlzIGEgdGVzdGJlZCBmb3IgYSBjYWxlbmRhciBwaWNrZXIuPC9wPgorCis8ZGl2PjxpbnB1
dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZSI+PC9kaXY+Cis8aWZyYW1lPjwvaWZyYW1lPgorCis8b2wg
aWQ9ImNvbnNvbGUiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij4KKzwvb2w+CisKKzxz
Y3JpcHQ+Cit2YXIgZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWZyYW1l
JylbMF07Cit2YXIgZG9jID0gZnJhbWUuY29udGVudERvY3VtZW50OworZG9jLmRvY3VtZW50RWxl
bWVudC5pbm5lckhUTUwgPSAnPGhlYWQ+PC9oZWFkPjxib2R5PjxkaXYgaWQ9bWFpbj5Mb2FkaW5n
Li4uPC9kaXY+PC9ib2R5Pic7Cit2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCdsaW5rJyk7
CitsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JzsKK2xpbmsuaHJlZiA9ICcuLi8uLi9Tb3VyY2UvV2Vi
Q29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzPycgKyAobmV3IERhdGUoKSkuZ2V0VGlt
ZSgpOworZG9jLmhlYWQuYXBwZW5kQ2hpbGQobGluayk7Cit2YXIgc2NyaXB0ID0gZG9jLmNyZWF0
ZUVsZW1lbnQoJ3NjcmlwdCcpOworc2NyaXB0LnNyYyA9ICcuLi8uLi9Tb3VyY2UvV2ViQ29yZS9S
ZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanM/JyArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7Citk
b2MuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOworCit2YXIgZW5nbGlzaEFyZ3VtZW50cyA9IHsK
KyAgICBsb2NhbGU6ICdlbi1VUycsCisgICAgbW9udGhMYWJlbHMgOiBbJ0phbnVhcnknLCAnRmVi
cnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLAorICAgICdKdWx5JywgJ0F1
Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddLAor
ICAgIGRheUxhYmVscyA6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmkn
LCAnU2F0J10sCisgICAgdG9kYXlMYWJlbCA6ICdUb2RheScsCisgICAgY2xlYXJMYWJlbCA6ICdD
bGVhcicsCisgICAgY2FuY2VsTGFiZWwgOiAnQ2FuY2VsJywKKyAgICB3ZWVrU3RhcnREYXkgOiAw
LAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDk5LTEyLTMxJywKK307Cit2YXIgamFwYW5l
c2VBcmd1bWVudHMgPSB7CisgICAgbG9jYWxlOiAnamEtSlAnLAorICAgIG1vbnRoTGFiZWxzIDog
Wycx5pyIJywgJzLmnIgnLCAnM+aciCcsICc05pyIJywgJzXmnIgnLCAnNuaciCcsCisgICAgJzfm
nIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyIJ10sCisgICAgZGF5
TGFiZWxzIDogWyfml6UnLCAn5pyIJywgJ+eBqycsICfmsLQnLCAn5pyoJywgJ+mHkScsICflnJ8n
XSwKKyAgICB0b2RheUxhYmVsIDogJ+S7iuaXpScsCisgICAgY2xlYXJMYWJlbCA6ICfjgq/jg6rj
gqInLAorICAgIGNhbmNlbExhYmVsIDogJ+WPluOCiua2iOOBlycsCisgICAgd2Vla1N0YXJ0RGF5
IDogMCwKKyAgICBzdGVwIDogMSwKKyAgICBtYXggOiAnMjA5OS0wMy0xNScsCit9Oworc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICBmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKEpT
T04uc3RyaW5naWZ5KGVuZ2xpc2hBcmd1bWVudHMpLCAiKiIpOworICAgIGZyYW1lLmNvbnRlbnRX
aW5kb3cuc2V0VmFsdWVBbmRDbG9zZVBvcHVwID0gZnVuY3Rpb24obnVtVmFsdWUsIHN0cmluZ1Zh
bHVlKSB7CisgICAgICAgIHdpbmRvdy5sb2coJ251bWJlcj0nICsgbnVtVmFsdWUgKyAnLCBzdHJp
bmc9IicgKyBzdHJpbmdWYWx1ZSArICciJyk7CisgICAgICAgIGlmIChudW1WYWx1ZSA9PSAwKQor
ICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRlJykudmFsdWUg
PSBzdHJpbmdWYWx1ZTsKKyAgICB9OworfSwgMTAwKTsKKworCitmdW5jdGlvbiBsb2coc3RyKSB7
CisgICAgdmFyIGVudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTsKKyAgICBlbnRy
eS5pbm5lclRleHQgPSBzdHI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUn
KS5hcHBlbmRDaGlsZChlbnRyeSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135486</attachid>
            <date>2012-04-03 19:09:46 -0700</date>
            <delta_ts>2012-04-04 20:27:14 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>bug-83011-20120404110944.patch</filename>
            <type>text/plain</type>
            <size>45212</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyOTkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTA3YThhYTljYTUyMzk3
MGQyMTM3NDMxNGI3Njc2MTVjMjM1YTY0OC4uYzZlMmM4Zjg5ODFiZTE5ZmU2N2M4MmEwZWM1Y2Y5
ZjU2MGZjMTExZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTAzICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgSmF2YVNjcmlwdCBh
bmQgQ1NTIGNvZGUgZm9yIHRoZSBjYWxlbmRhciBwaWNrZXIgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDExCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGVuZGFyUGlj
a2VyLmpzIGFuZCBjYWxlbmRhclBpY2tlci5jc3MsIGFuZCBhIGJ1bGQgcnVsZSB0bworICAgICAg
ICBnZW5lcnRlIGEgQysrIGZpbGUuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgbWFrZSBhbnkgYmVoYXZp
b3IgY2hhbmdlCisgICAgICAgIGJlY2F1c2UgdGhlIGNvZGUgaXMgd3JhcHBlZCBieSBFTkFCTEUo
Q0FMRU5EQVJfUElDS0VSKS4KKworICAgICAgICBUZXN0czogTWFudWFsVGVzdHMvZm9ybXMvY2Fs
ZW5kYXItcGlja2VyLmh0bWwKKworICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5j
c3M6IEFkZGVkLgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5qczogQWRkZWQu
CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEdlbmVyYXRlIENhbGVuZGFyUGlj
a2VyLntjcHAsaH0gZnJvbSBjYWxlbmRhclBpY2tlci57Y3NzLGpzfS4KKwogMjAxMi0wNC0wMiAg
Q2hyaXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBzZWFy
Y2ggZmllbGQgb24gR29vZ2xlLmNvbSBkb2VzIG5vdCBoYXZlIHRoZSBBWFNlYXJjaEZpZWxkIHN1
YnJvbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tl
ci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYzODE0YjZjMzg4NWE4YWE4NzExOTNiYTE4OGZmZWY0OWVjYTc3YWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzCkBA
IC0wLDAgKzEsMjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworYm9keSB7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBwdXJwbGU7CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250
cm9sOworICAgIG1hcmdpbjogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorCisubm8tZm9j
dXMtcmluZyA6Zm9jdXMgeworICAgIG91dGxpbmU6IG5vbmU7Cit9CisKKyNtYWluIHsKKyAgICB4
YmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRv
bSwgZnJvbSgjZjBmOGZmKSwgdG8oI2NjZGRlZSkpOworICAgIGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOworICAgIGJvcmRlcjogc29saWQgMXB4ICM4ODk5YWE7CisgICAgYm94LXNoYWRvdzogaW5z
ZXQgMnB4IDJweCAycHggd2hpdGUsCisgICAgICAgIGluc2V0IC0ycHggLTJweCAxcHggcmdiYSgw
LDAsMCwwLjEpOworICAgIHBhZGRpbmc6IDZweDsKK30KKworLnllYXItbW9udGgtYXJlYSB7Cit9
CisKKy55ZWFyLW1vbnRoLXVwcGVyIHsKKyAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKK30KKwor
LnllYXItc2VsZWN0b3IgeworICAgIHRleHQtYWxpZ246IHJpZ2h0OworICAgIHdpZHRoOiA2ZW07
Cit9CisKKy5tb250aC1zZWxlY3Rvci1ib3ggeworICAgIGRpc3BsYXk6IGlubGluZS1ib3g7Cisg
ICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtYm94LWZsZXg6IDI7Cit9CisKKy5t
b250aC1zZWxlY3RvciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29y
OiBwb2ludGVyOworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBwYWRkaW5nOiAzcHgg
NnB4IDNweCA2cHg7Cit9CisubW9udGgtc2VsZWN0b3I6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICIg
4pa8IjsKKyAgICBmb250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1
cCB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBvdXRsaW5lOiBub25lOworICAgIHotaW5kZXg6
IDI7Cit9CisKKy5tb250aC1zZWxlY3Rvci13YWxsIHsKKyAgICBkaXNwbGF5OiBub25lOworICAg
IGhlaWdodDogMTAwJTsKKyAgICBsZWZ0OiAwcHg7CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHRvcDogMHB4OworICAgIHdpZHRoOiAxMDAlOworfQorCisueWVhci1tb250aC1idXR0b25z
IHsKK30KKworLyogRklYTUU6IFdlJ2QgbGlrZSB0byB1c2UgdGhlIHN0YW5kYXJkIGJ1dHRvbiBh
cHBlYXJhbmNlIGZvciBub24tTWFjLiAqLworLnllYXItbW9udGgtYnV0dG9uIHsKKyAgICAtd2Vi
a2l0LWFwcGVhcmFuY2U6IG5vbmU7CisgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChs
aW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZWVlKSwgY29sb3Itc3RvcCgwLjQs
ICNmZmYpLCBjb2xvci1zdG9wKDAuNiwgI2RkZGRkZCksIHRvKCNlZWUpKTsKKyAgICBib3JkZXI6
IHNvbGlkIDFweCAjNDQ0OworICAgIGJvcmRlci1yYWRpdXM6IDNweDsKKyAgICBib3gtc2hhZG93
OiBpbnNldCAxcHggMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNCksIGluc2V0IC0xcHggLTFw
eCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpOworICAgIHBhZGRpbmctbGVmdDogM3B4OworICAg
IHBhZGRpbmctcmlnaHQ6IDNweDsKK30KKworLnllYXItbW9udGgtYnV0dG9uOmhvdmVyIHsKKyAg
ICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90
dG9tLCBmcm9tKCNlMGYwZmYpLCBjb2xvci1zdG9wKDAuNCwgI2UwZjBmZiksIGNvbG9yLXN0b3Ao
MC42LCAjYjBlMGZmKSwgdG8oI2IwZTBmZikpOworICAgIGJvcmRlcjogc29saWQgMXB4ICM0NDg7
Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbjphY3RpdmUgeworICAgIGJvcmRlcjogc29saWQgMXB4
IGJsYWNrOworICAgIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMXB4IHJnYmEoMCwwLDAsMC4z
KSwgaW5zZXQgLTFweCAtMXB4IDFweCByZ2JhKDAsMCwwLDAuMyk7Cit9CisKKy55ZWFyLW1vbnRo
LWJ1dHRvbjpkaXNhYmxlZCB7CisgICAgY29sb3I6ICM4ODg7CisgICAgYmFja2dyb3VuZDogLXdl
YmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZWVlKSwg
Y29sb3Itc3RvcCgwLjQsICNmZmYpLCBjb2xvci1zdG9wKDAuNiwgI2RkZGRkZCksIHRvKCNlZWUp
KTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjY2NjOworICAgIGJveC1zaGFkb3c6IGluc2V0IDFw
eCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KSwgaW5zZXQgLTFweCAtMXB4IDFweCByZ2Jh
KDI1NSwyNTUsMjU1LDAuNCk7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbi1sZWZ0IHsKKyAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbi1yaWdodCB7Cisg
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisuZGF5cy1hcmVhLWNvbnRhaW5lciB7Cisg
ICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggYmxhY2s7
CisgICAgbWFyZ2luLWJvdHRvbTogNHB4OworICAgIG1hcmdpbi10b3A6IDRweDsKKyAgICBvdmVy
ZmxvdzogaGlkZGVuOworfQorCisuZGF5cy1hcmVhIHsgLyogPHRhYmxlPiAqLworICAgIGJhY2tn
cm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAg
Ym9yZGVyLXNwYWNpbmc6IDBweDsKKyAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7Cisg
ICAgdGFibGUtbGF5b3V0OiBmaXhlZDsKKyAgICB3aWR0aDogMTAwJTsKK30KKworLmRheS1sYWJl
bC1jb250YWluZXIgeyAvKiA8dHI+ICovCit9CisKKy5kYXktbGFiZWwgeyAvKiA8dGg+ICovCisg
ICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGJhY2tncm91bmQtY29sb3I6
ICNlM2U5ZmY7CisgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNmMGY0ZmY7CisgICAgYm9yZGVyLXRv
cC1jb2xvcjogI2YwZjRmZjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjZDBkNGYwOworICAgIGNv
bG9yOiAjMjBjOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1hbGlnbjogY2Vu
dGVyOworfQorCisud2Vlay1jb250YWluZXIgeyAvKiA8dHI+ICovCit9CisKKy5kYXkgeyAvKiA8
dGQ+ICovCisgICAgcGFkZGluZzogMXB4OworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAg
ICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Cit9CisKKy5hdmFpbGFibGUgeworICAg
IGN1cnNvcjogZGVmYXVsdDsKKyAgICBmb250LXdlaWdodDogNzAwOworICAgIGJhY2tncm91bmQt
Y29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOworICAgIGJvcmRlci1y
YWRpdXM6IDVweDsKKyAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cit9CisK
Ky5ub3QtdGhpcy1tb250aCB7CisgICAgY29sb3I6IGdyYXl0ZXh0OworICAgIGZvbnQtd2VpZ2h0
OiA0MDA7CisgICAgdGV4dC1zaGFkb3c6IG5vbmU7Cit9CisKKy5hdmFpbGFibGUuZGF5LXNlbGVj
dGVkIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoaWdobGlnaHQ7CisgICAgY29sb3I6IGhpZ2hs
aWdodHRleHQ7CisgICAgdGV4dC1zaGFkb3c6IG5vbmU7Cit9CisKKy51bmF2YWlsYWJsZSB7Cisg
ICAgY3Vyc29yOiBkZWZhdWx0OworICAgIGNvbG9yOiBncmF5dGV4dDsKKyAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZWVlOworICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CisgICAgLXdlYmtpdC10
cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyBlYXNlOworfQorCisudW5hdmFpbGFibGUtdXAg
eworfQorCisudW5hdmFpbGFibGUtZG93biB7Cit9CisKKy51bmF2YWlsYWJsZS5kYXktc2VsZWN0
ZWQgeworICAgIGJvcmRlcjogMXB4IHNvbGlkIGhpZ2hsaWdodDsKK30KKworLnRvZGF5LWJ1dHRv
biB7Cit9CisKKy5jbGVhci1idXR0b24geworfQorCisuY2FuY2VsLWJ1dHRvbiB7CisgICAgZmxv
YXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVu
ZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY5NzM0MTBlNzE5NGVlYTIyMGIxZDQ2MDg4OTBhMGFmMzY3NDRiMzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIu
anMKQEAgLTAsMCArMSw5NTAgQEAKKyJ1c2Ugc3RyaWN0IjsKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBGSVhNRToKKy8vICAtIFJUTAor
Ly8gIC0gVG91Y2ggZXZlbnQKKwordmFyIENsYXNzID0geworICAgIEF2YWlsYWJsZTogJ2F2YWls
YWJsZScsCisgICAgQ2FuY2VsQnV0dG9uOiAnY2FuY2VsLWJ1dHRvbicsCisgICAgQ2xlYXJCdXR0
b246ICdjbGVhci1idXR0b24nLAorICAgIERheTogJ2RheScsCisgICAgRGF5TGFiZWw6ICdkYXkt
bGFiZWwnLAorICAgIERheUxhYmVsQ29udGFpbmVyOiAnZGF5LWxhYmVsLWNvbnRhaW5lcicsCisg
ICAgRGF5c0FyZWE6ICdkYXlzLWFyZWEnLAorICAgIERheXNBcmVhQ29udGFpbmVyOiAnZGF5cy1h
cmVhLWNvbnRhaW5lcicsCisgICAgTW9udGhTZWxlY3RvcjogJ21vbnRoLXNlbGVjdG9yJywKKyAg
ICBNb250aFNlbGVjdG9yQm94OiAnbW9udGgtc2VsZWN0b3ItYm94JywKKyAgICBNb250aFNlbGVj
dG9yUG9wdXA6ICdtb250aC1zZWxlY3Rvci1wb3B1cCcsCisgICAgTW9udGhTZWxlY3RvcldhbGw6
ICdtb250aC1zZWxlY3Rvci13YWxsJywKKyAgICBOb0ZvY3VzUmluZzogJ25vLWZvY3VzLXJpbmcn
LAorICAgIE5vdFRoaXNNb250aDogJ25vdC10aGlzLW1vbnRoJywKKyAgICBTZWxlY3RlZDogJ2Rh
eS1zZWxlY3RlZCcsCisgICAgVG9kYXlCdXR0b246ICd0b2RheS1idXR0b24nLAorICAgIFRvZGF5
Q2xlYXJBcmVhOiAndG9kYXktY2xlYXItYXJlYScsCisgICAgVW5hdmFpbGFibGU6ICd1bmF2YWls
YWJsZScsCisgICAgVW5hdmFpbGFibGVEb3duOiAndW5hdmFpbGFibGUtZG93bicsCisgICAgVW5h
dmFpbGFibGVVcDogJ3VuYXZhaWxhYmxlLXVwJywKKyAgICBXZWVrQ29udGFpbmVyOiAnd2Vlay1j
b250YWluZXInLAorICAgIFllYXJNb250aEFyZWE6ICd5ZWFyLW1vbnRoLWFyZWEnLAorICAgIFll
YXJNb250aEJ1dHRvbjogJ3llYXItbW9udGgtYnV0dG9uJywKKyAgICBZZWFyTW9udGhCdXR0b25M
ZWZ0OiAneWVhci1tb250aC1idXR0b24tbGVmdCcsCisgICAgWWVhck1vbnRoQnV0dG9uUmlnaHQ6
ICd5ZWFyLW1vbnRoLWJ1dHRvbi1yaWdodCcsCisgICAgWWVhck1vbnRoVXBwZXI6ICd5ZWFyLW1v
bnRoLXVwcGVyJywKK307CisKKy8qKgorICogQHR5cGUge09iamVjdH0KKyAqLwordmFyIGdsb2Jh
bCA9IHsKKyAgICBhcmd1bWVudHNSZWNlaXZlZDogZmFsc2UsCisgICAgcGFyYW1zOiBudWxsLAor
fTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gVXRpbGl0eSBmdW5jdGlvbnMKKworLyoqCisgKiBAcGFyYW0g
e3N0cmluZ30gaWQKKyAqLworZnVuY3Rpb24gJChpZCkgeworICAgIHJldHVybiBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChpZCk7Cit9CisKK2Z1bmN0aW9uIGJpbmQoZnVuYywgY29udGV4dCkgewor
ICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4
dCwgYXJndW1lbnRzKTsKKyAgICB9OworfQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB0YWdO
YW1lCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0
X3RleHQKKyAqLworZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9w
dF90ZXh0KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpOworICAgIGlmIChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdj
bGFzcycsIG9wdF9jbGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7Cit9CisKKy8qKgorICogQHJldHVybiB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2Fs
ZSBuYW1lLiBlLmcuICdlbi11cycKKyAqLworZnVuY3Rpb24gZ2V0TG9jYWxlKCkgeworICAgIHJl
dHVybiAoZ2xvYmFsLnBhcmFtcy5sb2NhbGUgfHwgJ2VuLXVzJykudG9Mb3dlckNhc2UoKTsKK30K
KworLyoqCisgKiBAcmV0dXJuIHshc3RyaW5nfSBsb3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5n
LiAnZW4nCisgKi8KK2Z1bmN0aW9uIGdldExhbmd1YWdlKCkgeworICAgIHZhciBsb2NhbGUgPSBn
ZXRMb2NhbGUoKTsKKyAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsK
KyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuICdlbic7CisgICAgcmV0dXJuIHJlc3Vs
dFsxXTsKK30KKworZnVuY3Rpb24gZm9ybWF0SmFwYW5lc2VJbXBlcmlhbEVyYSh5ZWFyLCBtb250
aCkgeworICAgIGlmICh5ZWFyID4gMTk4OSkKKyAgICAgICAgcmV0dXJuICco5bmz5oiQJyArICh5
ZWFyIC0gMTk4OCkgKyAn5bm0KSc7CisgICAgaWYgKHllYXIgPT0gMTk4OSkKKyAgICAgICAgcmV0
dXJuICco5bmz5oiQ5YWD5bm0KSc7CisgICAgaWYgKHllYXIgPj0gMTkyNykKKyAgICAgICAgcmV0
dXJuICco5pit5ZKMJyArICh5ZWFyIC0gMTkyNSkgKyAn5bm0KSc7CisgICAgaWYgKHllYXIgPiAx
OTEyKQorICAgICAgICByZXR1cm4gJyjlpKfmraMnICsgKHllYXIgLSAxOTExKSArICflubQpJzsK
KyAgICBpZiAoeWVhciA9PSAxOTEyICYmIG1vbnRoID49IDcpCisgICAgICAgIHJldHVybiAnKOWk
p+ato+WFg+W5tCknOworICAgIGlmICh5ZWFyID4gMTg2OCkKKyAgICAgICAgcmV0dXJuICco5piO
5rK7JyArICh5ZWFyIC0gMTg2NykgKyAn5bm0KSc7CisgICAgaWYgKHllYXIgPT0gMTg2OCkKKyAg
ICAgICAgcmV0dXJuICco5piO5rK75YWD5bm0KSc7CisgICAgcmV0dXJuICcnOworfQorCitmdW5j
dGlvbiBmb3JtYXRZZWFyTW9udGgoeWVhciwgbW9udGgpIHsKKyAgICB2YXIgeWVhclN0cmluZyA9
IFN0cmluZyh5ZWFyKTsKKyAgICB2YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1vbnRo
TGFiZWxzW21vbnRoXTsKKyAgICBzd2l0Y2ggKGdldExhbmd1YWdlKCkpIHsKKyAgICBjYXNlICdl
dSc6CisgICAgY2FzZSAnZmlsJzoKKyAgICBjYXNlICdsdCc6CisgICAgY2FzZSAnbWwnOgorICAg
IGNhc2UgJ210JzoKKyAgICBjYXNlICd0bCc6CisgICAgY2FzZSAndXInOgorICAgICAgICByZXR1
cm4geWVhclN0cmluZyArICcgJyArIG1vbnRoU3RyaW5nOworICAgIGNhc2UgJ2h1JzoKKyAgICAg
ICAgcmV0dXJuIHllYXJTdHJpbmcgKyAnLiAnICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAnamEn
OgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICflubQnICsgZm9ybWF0SmFwYW5lc2VJbXBl
cmlhbEVyYSh5ZWFyLCBtb250aCkgKyAnICcgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICd6aCc6
CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgJ+W5tCcgKyBtb250aFN0cmluZzsKKyAgICBj
YXNlICdrbyc6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgJ+uFhCAnICsgbW9udGhTdHJp
bmc7CisgICAgY2FzZSAnbHYnOgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICcuIGcuICcg
KyBtb250aFN0cmluZzsKKyAgICBjYXNlICdwdCc6CisgICAgICAgIHJldHVybiBtb250aFN0cmlu
ZyArICcgZGUgJyArIHllYXJTdHJpbmc7CisgICAgY2FzZSAnc3InOgorICAgICAgICByZXR1cm4g
bW9udGhTdHJpbmcgKyAnLiAnICsgeWVhclN0cmluZzsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gbW9udGhTdHJpbmcgKyAnICcgKyB5ZWFyU3RyaW5nOworICAgIH0KK30KKworLyoqCisg
KiBAcmV0dXJuIHshRGF0ZX0KKyAqLworZnVuY3Rpb24gcGFyc2VEYXRlU3RyaW5nKG9wdF9jdXJy
ZW50KSB7CisgICAgaWYgKG9wdF9jdXJyZW50KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBvcHRf
Y3VycmVudC5tYXRjaCgvKFxkKyktKFxkKyktKFxkKykvKTsKKyAgICAgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwg
TnVtYmVyKHJlc3VsdFsyXSkgLSAxLCBOdW1iZXIocmVzdWx0WzNdKSkpOworICAgIH0KKyAgICB2
YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAvLyBDcmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51
bWJlcnMgYXMgbG9jYWwgZGF0ZS4KKyAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93Lmdl
dEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKSk7Cit9CisKKy8qKgor
ICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVyfSBtb250aAorICogQHBh
cmFtIHtudW1iZXJ9IGRheQorICogQHJldHVybiB7c3RyaW5nfQorICovCitmdW5jdGlvbiBzZXJp
YWxpemVEYXRlKHllYXIsIG1vbnRoLCBkYXkpIHsKKyAgICB2YXIgeWVhclN0cmluZyA9IFN0cmlu
Zyh5ZWFyKTsKKyAgICBpZiAoeWVhclN0cmluZy5sZW5ndGggPCA0KQorICAgICAgICB5ZWFyU3Ry
aW5nID0gKCcwMDAnICsgeWVhclN0cmluZykuc3Vic3RyKC00LCA0KTsKKyAgICByZXR1cm4geWVh
clN0cmluZyArICctJyArICgnMCcgKyAobW9udGggKyAxKSkuc3Vic3RyKC0yLCAyKSArICctJyAr
ICgnMCcgKyBkYXkpLnN1YnN0cigtMiwgMikKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5pdGlhbGl6
YXRpb24KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudDsKKyAqLworZnVuY3Rpb24gaGFu
ZGxlTWVzc2FnZShldmVudCkgeworICAgIGlmIChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworICAg
IGluaXRpYWxpemUoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRs
ZUFyZ3VtZW50c1RpbWVvdXQoKSB7CisgICAgaWYgKGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIHZhciBhcmdzID0geworICAgICAgICBtb250aExhYmVscyA6
IFsnbTEnLCAnbTInLCAnbTMnLCAnbTQnLCAnbTUnLCAnbTYnLAorICAgICAgICAgICAgICAgICAg
ICAgICAnbTcnLCAnbTgnLCAnbTknLCAnbTEwJywgJ20xMScsICdtMTInXSwKKyAgICAgICAgZGF5
TGFiZWxzIDogWydkMScsICdkMicsICdkMycsICdkNCcsICdkNScsICdkNicsICdkNyddLAorICAg
ICAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAgICAgICAgY2xlYXJMYWJlbCA6ICdDbGVhcics
CisgICAgICAgIGNhbmNlbExhYmVsIDogJ0NhbmNlbCcsCisgICAgICAgIHdlZWtTdGFydERheSA6
IDAsCisgICAgICAgIHN0ZXAgOiAxLAorICAgIH07CisgICAgaW5pdGlhbGl6ZShhcmdzKTsKK30K
KworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqIEByZXR1cm4gez9zdHJpbmd9IEFu
IGVycm9yIG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBlcnJvcnMuCisg
Ki8KK2Z1bmN0aW9uIHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKKyAgICBpZiAoIWFyZ3MubW9u
dGhMYWJlbHMpCisgICAgICAgIHJldHVybiAnTm8gbW9udGhMYWJlbHMuJzsKKyAgICBpZiAoYXJn
cy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCisgICAgICAgIHJldHVybiAnbW9udGhMYWJlbHMg
aXMgbm90IGFuIGFycmF5IHdpdGggMTIgZWxlbWVudHMuJzsKKyAgICBpZiAoIWFyZ3MuZGF5TGFi
ZWxzKQorICAgICAgICByZXR1cm4gJ05vIGRheUxhYmVscy4nOworICAgIGlmIChhcmdzLmRheUxh
YmVscy5sZW5ndGggIT0gNykKKyAgICAgICAgcmV0dXJuICdkYXlMYWJlbHMgaXMgbm90IGFuIGFy
cmF5IHdpdGggNyBlbGVtZW50cy4nOworICAgIGlmICghYXJncy5jbGVhckxhYmVsKQorICAgICAg
ICByZXR1cm4gJ05vIGNsZWFyTGFiZWwuJzsKKyAgICBpZiAoIWFyZ3MudG9kYXlMYWJlbCkKKyAg
ICAgICAgcmV0dXJuICdObyB0b2RheUxhYmVsLic7CisgICAgaWYgKGFyZ3Mud2Vla1N0YXJ0RGF5
KSB7CisgICAgICAgIGlmIChhcmdzLndlZWtTdGFydERheSA8IDAgfHwgYXJncy53ZWVrU3RhcnRE
YXkgPiA2KQorICAgICAgICAgICAgcmV0dXJuICdJbnZhbGlkIHdlZWtTdGFydERheTogJyArIGFy
Z3Mud2Vla1N0YXJ0RGF5OworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBA
cGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rpb24gaW5pdGlhbGl6ZShhcmdzKSB7Cisg
ICAgdmFyIG1haW4gPSAkKCdtYWluJyk7CisgICAgbWFpbi5jbGFzc0xpc3QuYWRkKENsYXNzLk5v
Rm9jdXNSaW5nKTsKKworICAgIHZhciBlcnJvclN0cmluZyA9IHZhbGlkYXRlQXJndW1lbnRzKGFy
Z3MpOworICAgIGlmIChlcnJvclN0cmluZykgeworICAgICAgICBtYWluLnRleHRDb250ZW50ID0g
J0ludGVybmFsIGVycm9yOiAnICsgZXJyb3JTdHJpbmc7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Z2xvYmFsLnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIGNoZWNrTGltaXRzKCk7CisgICAgICAgIGxh
eW91dCgpOworCisgICAgICAgIHZhciBpbml0aWFsRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyhhcmdz
LmN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGlmIChpbml0aWFsRGF0ZSA8IGdsb2JhbC5taW5pbXVt
RGF0ZSkKKyAgICAgICAgICAgIGluaXRpYWxEYXRlID0gZ2xvYmFsLm1pbmltdW1EYXRlOworICAg
ICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZSkKKyAgICAgICAg
ICAgIGluaXRpYWxEYXRlID0gZ2xvYmFsLm1heGltdW1EYXRlOworICAgICAgICBnbG9iYWwuZGF5
c1RhYmxlLnNlbGVjdERhdGUoaW5pdGlhbERhdGUpOworCisgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkKKyAgICAgICAg
ICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLmhlaWdodCA9IG1haW4ub2Zmc2V0SGVp
Z2h0ICsgJ3B4JzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHdpbmRvdy5y
ZXNpemVUbyh3aW5kb3cub3V0ZXJXaWR0aCwgbWFpbi5vZmZzZXRUb3AgKyBtYWluLm9mZnNldEhl
aWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIDApOworICAgIH0KK30KKworZnVuY3Rp
b24gY2hlY2tMaW1pdHMoKSB7CisgICAgLy8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUg
V2ViQ29yZS9wbGF0Zm9ybS9EYXRlQ29tcG9uZW50cy5oLgorICAgIGdsb2JhbC5taW5pbXVtRGF0
ZSA9IG5ldyBEYXRlKC02MjEzNTU5NjgwMDAwMC4wKTsKKyAgICBnbG9iYWwubWF4aW11bURhdGUg
PSBuZXcgRGF0ZSg4NjQwMDAwMDAwMDAwMDAwLjApOworICAgIC8vIFNlZSBXZWJDb3JlL2h0bWwv
RGF0ZUlucHV0VHlwZS5jcHAuCisgICAgZ2xvYmFsLnN0ZXAgPSA4NjQwMDAwMDsKKworICAgIGlm
IChnbG9iYWwucGFyYW1zLm1pbikgeworICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1pbiBp
cyBhIHZhbGlkIGRhdGUuCisgICAgICAgIGdsb2JhbC5taW5pbXVtRGF0ZSA9IHBhcnNlRGF0ZVN0
cmluZyhnbG9iYWwucGFyYW1zLm1pbik7CisgICAgfQorICAgIGlmIChnbG9iYWwucGFyYW1zLm1h
eCkgeworICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1heCBpcyBhIHZhbGlkIGRhdGUuCisg
ICAgICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyhnbG9iYWwucGFyYW1z
Lm1heCk7CisgICAgfQorICAgIGlmIChnbG9iYWwucGFyYW1zLnN0ZXApCisgICAgICAgIGdsb2Jh
bC5zdGVwICo9IGdsb2JhbC5wYXJhbXMuc3RlcDsKK30KKworZnVuY3Rpb24gbGF5b3V0KCkgewor
ICAgIHZhciBtYWluID0gJCgnbWFpbicpOworICAgIHZhciBwYXJhbXMgPSBnbG9iYWwucGFyYW1z
OworICAgIG1haW4ucmVtb3ZlQ2hpbGQobWFpbi5maXJzdENoaWxkKTsKKyAgICBkb2N1bWVudC5i
b2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVHbG9iYWxLZXkpOworCisgICAg
Z2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVhck1vbnRoQ29udHJvbGxlcigpOwor
ICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmF0dGFjaFRvKG1haW4pOworICAgIGdsb2Jh
bC5kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKCk7CisgICAgZ2xvYmFsLmRheXNUYWJsZS5hdHRh
Y2hUbyhtYWluKTsKKyAgICBsYXlvdXRCdXR0b25zKG1haW4pOworfQorCitmdW5jdGlvbiBsYXlv
dXRCdXR0b25zKG1haW4pIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgnZGl2
JywgQ2xhc3MuVG9kYXlDbGVhckFyZWEpOworICAgIGdsb2JhbC50b2RheSA9IGNyZWF0ZUVsZW1l
bnQoJ2lucHV0JywgQ2xhc3MuVG9kYXlCdXR0b24pOworICAgIGdsb2JhbC50b2RheS50eXBlID0g
J2J1dHRvbic7CisgICAgZ2xvYmFsLnRvZGF5LnZhbHVlID0gZ2xvYmFsLnBhcmFtcy50b2RheUxh
YmVsOworICAgIGdsb2JhbC50b2RheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVRv
ZGF5KTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZ2xvYmFsLnRvZGF5KTsKKyAgICBnbG9i
YWwuY2xlYXIgPSBudWxsOworICAgIGlmICghZ2xvYmFsLnBhcmFtcy5yZXF1aXJlZCkgeworICAg
ICAgICBnbG9iYWwuY2xlYXIgPSBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIENsYXNzLkNsZWFyQnV0
dG9uKTsKKyAgICAgICAgZ2xvYmFsLmNsZWFyLnR5cGUgPSAnYnV0dG9uJzsKKyAgICAgICAgZ2xv
YmFsLmNsZWFyLnZhbHVlID0gZ2xvYmFsLnBhcmFtcy5jbGVhckxhYmVsOworICAgICAgICBnbG9i
YWwuY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGVhcik7CisgICAgICAg
IGNvbnRhaW5lci5hcHBlbmRDaGlsZChnbG9iYWwuY2xlYXIpOworICAgIH0KKyAgICBtYWluLmFw
cGVuZENoaWxkKGNvbnRhaW5lcik7CisKKyAgICBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wg
PSBnbG9iYWwuY2xlYXIgfHwgZ2xvYmFsLnRvZGF5OworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgor
ICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIoKSB7Cisg
ICAgdGhpcy5fY3VycmVudFllYXIgPSAtMTsKKyAgICB0aGlzLl9jdXJyZW50TW9udGggPSAtMTsK
K30KKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbiht
YWluKSB7CisgICAgdmFyIG91dGVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgnZGl2JywgQ2xh
c3MuWWVhck1vbnRoQXJlYSk7CisKKyAgICB2YXIgaW5uZXJDb250YWluZXIgPSBjcmVhdGVFbGVt
ZW50KCdkaXYnLCBDbGFzcy5ZZWFyTW9udGhVcHBlcik7CisgICAgb3V0ZXJDb250YWluZXIuYXBw
ZW5kQ2hpbGQoaW5uZXJDb250YWluZXIpOworCisgICAgdGhpcy5fYXR0YWNoTGVmdEJ1dHRvbnNU
byhpbm5lckNvbnRhaW5lcik7CisKKyAgICB2YXIgYm94ID0gY3JlYXRlRWxlbWVudCgnZGl2Jywg
Q2xhc3MuTW9udGhTZWxlY3RvckJveCk7CisgICAgaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQo
Ym94KTsKKyAgICAvLyBGSVhNRTogVGhlIHBvcHVwLW1lbnUgZW11bGF0aW9uIGJ5IGEgbGlzdGJv
eCBpcyBub3QgZ3JlYXQuCisgICAgdGhpcy5fbW9udGhQb3B1cCA9IGNyZWF0ZUVsZW1lbnQoJ3Nl
bGVjdCcsIENsYXNzLk1vbnRoU2VsZWN0b3JQb3B1cCk7CisgICAgdGhpcy5fbW9udGhQb3B1cC5h
ZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBiaW5kKHRoaXMuX2hhbmRsZVllYXJNb250aENoYW5n
ZSwgdGhpcykpOworICAgIGJveC5hcHBlbmRDaGlsZCh0aGlzLl9tb250aFBvcHVwKTsKKyAgICB0
aGlzLl9tb250aCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIENsYXNzLk1vbnRoU2VsZWN0b3IpOwor
ICAgIHRoaXMuX21vbnRoLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLl9zaG93
UG9wdXAsIHRoaXMpKTsKKyAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5fbW9udGgpOworCisgICAg
dGhpcy5fYXR0YWNoUmlnaHRCdXR0b25zVG8oaW5uZXJDb250YWluZXIpOworICAgIG1haW4uYXBw
ZW5kQ2hpbGQob3V0ZXJDb250YWluZXIpOworCisgICAgdGhpcy5fd2FsbCA9IGNyZWF0ZUVsZW1l
bnQoJ2RpdicsIENsYXNzLk1vbnRoU2VsZWN0b3JXYWxsKTsKKyAgICB0aGlzLl93YWxsLmFkZEV2
ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0aGlzLl9jbG9zZVBvcHVwLCB0aGlzKSk7CisgICAg
bWFpbi5hcHBlbmRDaGlsZCh0aGlzLl93YWxsKTsKKworICAgIGdsb2JhbC5maXJzdEZvY3VzYWJs
ZUNvbnRyb2wgPSB0aGlzLl9sZWZ0MjsgLy8gRklYTUU6IFNob3VkIGl0IGJlIHRoaXMubW9udGg/
Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJzQnV0dG9ucyA9IGZhbHNlOwor
CitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fYXR0YWNoTGVmdEJ1dHRvbnNUbyA9IGZ1
bmN0aW9uKHBhcmVudCkgeworICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdkaXYn
LCBDbGFzcy5ZZWFyTW9udGhCdXR0b25MZWZ0KTsKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29u
dGFpbmVyKTsKKworICAgIGlmIChZZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJzQnV0dG9u
cykgeworICAgICAgICB0aGlzLl9sZWZ0MyA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ2xhc3Mu
WWVhck1vbnRoQnV0dG9uKTsKKyAgICAgICAgdGhpcy5fbGVmdDMudHlwZSA9ICdidXR0b24nOwor
ICAgICAgICB0aGlzLl9sZWZ0My52YWx1ZSA9ICc8PDwnOworICAgICAgICB0aGlzLl9sZWZ0My5h
ZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRo
aXMpKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQzKTsKKyAgICB9
CisKKyAgICB0aGlzLl9sZWZ0MiA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ2xhc3MuWWVhck1v
bnRoQnV0dG9uKTsKKyAgICB0aGlzLl9sZWZ0Mi50eXBlID0gJ2J1dHRvbic7CisgICAgdGhpcy5f
bGVmdDIudmFsdWUgPSAnPDwnOworICAgIHRoaXMuX2xlZnQyLmFkZEV2ZW50TGlzdGVuZXIoJ2Ns
aWNrJywgYmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcykpOworICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZCh0aGlzLl9sZWZ0Mik7CisKKyAgICB0aGlzLl9sZWZ0MSA9IGNyZWF0ZUVs
ZW1lbnQoJ2lucHV0JywgQ2xhc3MuWWVhck1vbnRoQnV0dG9uKTsKKyAgICB0aGlzLl9sZWZ0MS50
eXBlID0gJ2J1dHRvbic7CisgICAgdGhpcy5fbGVmdDEudmFsdWUgPSAnPCc7CisgICAgdGhpcy5f
bGVmdDEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNs
aWNrLCB0aGlzKSk7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQxKTsKK307
CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9hdHRhY2hSaWdodEJ1dHRvbnNUbyA9
IGZ1bmN0aW9uKHBhcmVudCkgeworICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCdk
aXYnLCBDbGFzcy5ZZWFyTW9udGhCdXR0b25SaWdodCk7CisgICAgcGFyZW50LmFwcGVuZENoaWxk
KGNvbnRhaW5lcik7CisgICAgdGhpcy5fcmlnaHQxID0gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCBD
bGFzcy5ZZWFyTW9udGhCdXR0b24pOworICAgIHRoaXMuX3JpZ2h0MS50eXBlID0gJ2J1dHRvbic7
CisgICAgdGhpcy5fcmlnaHQxLnZhbHVlID0gJz4nOworICAgIHRoaXMuX3JpZ2h0MS5hZGRFdmVu
dExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpKTsK
KyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmlnaHQxKTsKKworICAgIHRoaXMuX3Jp
Z2h0MiA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgQ2xhc3MuWWVhck1vbnRoQnV0dG9uKTsKKyAg
ICB0aGlzLl9yaWdodDIudHlwZSA9ICdidXR0b24nOworICAgIHRoaXMuX3JpZ2h0Mi52YWx1ZSA9
ICc+Pic7CisgICAgdGhpcy5fcmlnaHQyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYmluZCh0
aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcykpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGls
ZCh0aGlzLl9yaWdodDIpOworCisgICAgaWYgKFllYXJNb250aENvbnRyb2xsZXIuYWRkVGVuWWVh
cnNCdXR0b25zKSB7CisgICAgICAgIHRoaXMuX3JpZ2h0MyA9IGNyZWF0ZUVsZW1lbnQoJ2lucHV0
JywgQ2xhc3MuWWVhck1vbnRoQnV0dG9uKTsKKyAgICAgICAgdGhpcy5fcmlnaHQzLnR5cGUgPSAn
YnV0dG9uJzsKKyAgICAgICAgdGhpcy5fcmlnaHQzLnZhbHVlID0gJz4+Pic7CisgICAgICAgIHRo
aXMuX3JpZ2h0My5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJpbmQodGhpcy5faGFuZGxlQnV0
dG9uQ2xpY2ssIHRoaXMpKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jp
Z2h0Myk7CisgICAgfQorfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUueWVhciA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9jdXJyZW50WWVhcjsKK307CisKK1llYXJN
b250aENvbnRyb2xsZXIucHJvdG90eXBlLm1vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJu
IHRoaXMuX2N1cnJlbnRNb250aDsKK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBl
LnNldFllYXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgdGhpcy5fY3VycmVu
dFllYXIgPSB5ZWFyOworICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IG1vbnRoOworICAgIHRoaXMu
X3JlZHJhdygpOworfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3JlZHJhdyA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVs
bFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFy
IG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwu
bWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJl
bnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50TW9udGg7CisgICAgaWYgKHRoaXMuX2xlZnQzKQor
ICAgICAgICB0aGlzLl9sZWZ0My5kaXNhYmxlZCA9IGN1cnJlbnQgLSAxMyA8IG1pbjsKKyAgICB0
aGlzLl9sZWZ0Mi5kaXNhYmxlZCA9IGN1cnJlbnQgLSAyIDwgbWluOworICAgIHRoaXMuX2xlZnQx
LmRpc2FibGVkID0gY3VycmVudCAtIDEgPCBtaW47CisgICAgdGhpcy5fcmlnaHQxLmRpc2FibGVk
ID0gY3VycmVudCArIDEgPiBtYXg7CisgICAgdGhpcy5fcmlnaHQyLmRpc2FibGVkID0gY3VycmVu
dCArIDIgPiBtYXg7CisgICAgaWYgKHRoaXMuX3JpZ2h0MykKKyAgICAgICAgdGhpcy5fcmlnaHQz
LmRpc2FibGVkID0gY3VycmVudCArIDEzID4gbWF4OworICAgIHRoaXMuX21vbnRoLmlubmVyVGV4
dCA9IGZvcm1hdFllYXJNb250aCh0aGlzLl9jdXJyZW50WWVhciwgdGhpcy5fY3VycmVudE1vbnRo
KTsKKyAgICB3aGlsZSAodGhpcy5fbW9udGhQb3B1cC5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAg
IHRoaXMuX21vbnRoUG9wdXAucmVtb3ZlQ2hpbGQodGhpcy5fbW9udGhQb3B1cC5maXJzdENoaWxk
KTsKKyAgICBmb3IgKHZhciBtID0gY3VycmVudCAtIDY7IG0gPD0gY3VycmVudCArIDY7IG0rKykg
eworICAgICAgICBpZiAobSA8IG1pbiB8fCBtID4gbWF4KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIHZhciBvcHRpb24gPSBjcmVhdGVFbGVtZW50KCdvcHRpb24nLCB1bmRlZmluZWQs
IGZvcm1hdFllYXJNb250aChNYXRoLmZsb29yKG0gLyAxMiksIG0gJSAxMikpOworICAgICAgICBv
cHRpb24udmFsdWUgPSBTdHJpbmcoTWF0aC5mbG9vcihtIC8gMTIpKSArICctJyArIFN0cmluZyht
ICUgMTIpOworICAgICAgICB0aGlzLl9tb250aFBvcHVwLmFwcGVuZENoaWxkKG9wdGlvbik7Cisg
ICAgICAgIGlmIChtID09IGN1cnJlbnQpCisgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0
cnVlOworICAgIH0KK307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9zaG93UG9w
dXAgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9tb250aFBvcHVwLnNpemUgPSBNYXRoLm1heCg0
LCBNYXRoLm1pbigxMCwgdGhpcy5fbW9udGhQb3B1cC5sZW5ndGgpKTsKKyAgICB0aGlzLl9tb250
aFBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5
bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOworICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUueklu
ZGV4ID0gJzEwMDAnOyAvLyBMYXJnZXIgdGhhbiB0aGUgZGF5cyBhcmVhLgorICAgIHRoaXMuX21v
bnRoUG9wdXAuc3R5bGUubGVmdCA9IHRoaXMuX21vbnRoLm9mZnNldExlZnQgKyAncHgnOworICAg
IHRoaXMuX21vbnRoUG9wdXAuc3R5bGUudG9wID0gdGhpcy5fbW9udGgub2Zmc2V0VG9wICsgdGhp
cy5fbW9udGgub2Zmc2V0SGVpZ2h0ICsgJ3B4JzsKKyAgICB0aGlzLl9tb250aFBvcHVwLmZvY3Vz
KCk7CisKKyAgICB0aGlzLl93YWxsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgIHRoaXMu
X3dhbGwuc3R5bGUuekluZGV4ID0gJzk5OSc7IC8vIFRoaXMgc2hvdWxkIGJlIHNtYWxsZXIgdGhh
biB0aGUgei1pbmRleCBvZiBtb250aFBvcHVwLgorfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5w
cm90b3R5cGUuX2Nsb3NlUG9wdXAgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9tb250aFBvcHVw
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgdGhpcy5fd2FsbC5zdHlsZS5kaXNwbGF5ID0g
J25vbmUnOworfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZVllYXJN
b250aENoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX2Nsb3NlUG9wdXAoKTsKKworICAg
IHZhciByZXN1bHQgPSB0aGlzLl9tb250aFBvcHVwLnZhbHVlLm1hdGNoKC8oXGQrKS0oXGQrKS8p
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAgdmFyIG5ld1llYXIgPSBO
dW1iZXIocmVzdWx0WzFdKTsKKyAgICB2YXIgbmV3TW9udGggPSBOdW1iZXIocmVzdWx0WzJdKTsK
KyAgICBnbG9iYWwuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtlZXBTZWxlY3Rpb25Qb3Np
dGlvbihuZXdZZWFyLCBuZXdNb250aCk7Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLl9QcmV2
aW91c1RlblllYXJzID0gLTEyMDsKK1llYXJNb250aENvbnRyb2xsZXIuX1ByZXZpb3VzWWVhciA9
IC0xMjsKK1llYXJNb250aENvbnRyb2xsZXIuX1ByZXZpb3VzTW9udGggPSAtMTsKK1llYXJNb250
aENvbnRyb2xsZXIuX05leHRNb250aCA9IDE7CitZZWFyTW9udGhDb250cm9sbGVyLl9OZXh0WWVh
ciA9IDEyOworWWVhck1vbnRoQ29udHJvbGxlci5fTmV4dFRlblllYXJzID0gMTIwOworCitZZWFy
TW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihl
dmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fbGVmdDMpCisgICAgICAgIHRo
aXMuX21vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuX1ByZXZpb3VzVGVuWWVhcnMp
OworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9sZWZ0MikKKyAgICAgICAgdGhp
cy5fbW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5fUHJldmlvdXNZZWFyKTsKKyAg
ICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fbGVmdDEpCisgICAgICAgIHRoaXMuX21v
dmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuX1ByZXZpb3VzTW9udGgpOworICAgIGVs
c2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9yaWdodDEpCisgICAgICAgIHRoaXMuX21vdmVS
ZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuX05leHRNb250aCkKKyAgICBlbHNlIGlmIChl
dmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQyKQorICAgICAgICB0aGlzLl9tb3ZlUmVsYXRpdmVs
eShZZWFyTW9udGhDb250cm9sbGVyLl9OZXh0WWVhcik7CisgICAgZWxzZSBpZiAoZXZlbnQudGFy
Z2V0ID09IHRoaXMuX3JpZ2h0MykKKyAgICAgICAgdGhpcy5fbW92ZVJlbGF0aXZlbHkoWWVhck1v
bnRoQ29udHJvbGxlci5fTmV4dFRlblllYXJzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsK
K307CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9tb3ZlUmVsYXRpdmVseSA9IGZ1
bmN0aW9uKGFtb3VudCkgeworICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRD
RnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAg
dmFyIG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9i
YWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1
cnJlbnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50TW9udGg7CisgICAgdmFyIHVwZGF0ZWQgPSBj
dXJyZW50OworICAgIGlmIChhbW91bnQgPCAwKSB7CisgICAgICAgIHVwZGF0ZWQgPSBjdXJyZW50
ICsgYW1vdW50ID49IG1pbiA/IGN1cnJlbnQgKyBhbW91bnQgOiBtaW47CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBhbW91bnQgPD0gbWF4ID8gY3VycmVudCArIGFt
b3VudCA6IG1heDsKKyAgICB9CisgICAgaWYgKHVwZGF0ZWQgPT0gY3VycmVudCkKKyAgICAgICAg
cmV0dXJuOworICAgIGdsb2JhbC5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVj
dGlvblBvc2l0aW9uKE1hdGguZmxvb3IodXBkYXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsKK307
CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gRGF5
c1RhYmxlKCkgeworICAgIHRoaXMuX3ggPSAtMTsKKyAgICB0aGlzLl95ID0gLTE7CisgICAgdGhp
cy5fY3VycmVudFllYXIgPSAtMTsKKyAgICB0aGlzLl9jdXJyZW50TW9udGggPSAtMTsKK30KKwor
LyoqCisgKiBUaGUgbnVtYmVyIG9mIHdlZWsgbGluZXMgaW4gdGhlIHNjcmVlbi4KKyAqIEBjb25z
dAorICogQHR5cGUge251bWJlcn0KKyAqLworRGF5c1RhYmxlLl9XZWVrcyA9IDY7CisKK0RheXNU
YWJsZS5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CisgICAgdGhpcy5fZGF5
c0NvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3RhYmxlJywgQ2xhc3MuRGF5c0FyZWEpOworICAg
IHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBiaW5kKHRoaXMu
X2hhbmRsZURheUNsaWNrLCB0aGlzKSk7CisgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVu
dExpc3RlbmVyKCdtb3VzZW92ZXInLCBiaW5kKHRoaXMuX2hhbmRsZU1vdXNlT3ZlciwgdGhpcykp
OworICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBi
aW5kKHRoaXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKSk7CisgICAgdGhpcy5fZGF5c0NvbnRhaW5l
ci5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgYmluZCh0aGlzLl9tb3Zl
SW5EYXlzLCB0aGlzKSk7CisgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3RyJywg
Q2xhc3MuRGF5TGFiZWxDb250YWluZXIpOworICAgIHZhciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwu
cGFyYW1zLndlZWtTdGFydERheSB8fCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNzsgaSsr
KQorICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgndGgnLCBDbGFz
cy5EYXlMYWJlbCwgZ2xvYmFsLnBhcmFtcy5kYXlMYWJlbHNbKHdlZWtTdGFydERheSArIGkpICUg
N10pKTsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Cisg
ICAgdGhpcy5fZGF5cyA9IFtdOworICAgIGZvciAodmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9X
ZWVrczsgdysrKSB7CisgICAgICAgIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoJ3RyJywgQ2xh
c3MuV2Vla0NvbnRhaW5lcik7CisgICAgICAgIHZhciB3ZWVrID0gW107CisgICAgICAgIGZvciAo
dmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICB2YXIgZGF5ID0gY3JlYXRlRWxl
bWVudCgndGQnLCBDbGFzcy5EYXksICcgJyk7CisgICAgICAgICAgICBkYXkuc2V0QXR0cmlidXRl
KCdkYXRhLXBvc2l0aW9uLXgnLCBTdHJpbmcoZCkpOworICAgICAgICAgICAgZGF5LnNldEF0dHJp
YnV0ZSgnZGF0YS1wb3NpdGlvbi15JywgU3RyaW5nKHcpKTsKKyAgICAgICAgICAgIHdlZWsucHVz
aChkYXkpOworICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRheSk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5fZGF5cy5wdXNoKHdlZWspOworICAgICAgICB0aGlzLl9kYXlzQ29u
dGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgfQorICAgIGNvbnRhaW5lciA9IGNy
ZWF0ZUVsZW1lbnQoJ2RpdicsIENsYXNzLkRheXNBcmVhQ29udGFpbmVyKTsKKyAgICBjb250YWlu
ZXIuYXBwZW5kQ2hpbGQodGhpcy5fZGF5c0NvbnRhaW5lcik7CisgICAgY29udGFpbmVyLnRhYklu
ZGV4ID0gMDsKKyAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGJpbmQo
dGhpcy5faGFuZGxlS2V5LCB0aGlzKSk7CisgICAgbWFpbi5hcHBlbmRDaGlsZChjb250YWluZXIp
OworCisgICAgY29udGFpbmVyLmZvY3VzKCk7Cit9OworCitmdW5jdGlvbiBzdGVwTWlzbWF0Y2go
dGltZSkgeworICAgIHJldHVybiAodGltZSAtIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkp
ICUgZ2xvYmFsLnN0ZXAgIT0gMDsKK30KKworZnVuY3Rpb24gb3V0T2ZSYW5nZSh0aW1lKSB7Cisg
ICAgcmV0dXJuIHRpbWUgPCBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpIHx8IHRpbWUgPiBn
bG9iYWwubWF4aW11bURhdGUuZ2V0VGltZSgpOworfQorCitmdW5jdGlvbiBpc1ZhbGlkRGF0ZSh0
aW1lKSB7CisgICAgcmV0dXJuICFvdXRPZlJhbmdlKHRpbWUpICYmICFzdGVwTWlzbWF0Y2godGlt
ZSk7Cit9CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVtYmVy
fSBtb250aAorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9yZW5kZXJNb250aCA9IGZ1bmN0aW9u
KHllYXIsIG1vbnRoKSB7CisgICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOworICAgIHRoaXMu
X2N1cnJlbnRNb250aCA9IG1vbnRoOworICAgIHZhciBkYXlJdGVyYXRvciA9IG5ldyBEYXRlKERh
dGUuVVRDKHllYXIsIG1vbnRoLCAxKSk7CisgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRnVsbFllYXIo
eWVhcik7CisgICAgdmFyIG1vbnRoU3RhcnREYXkgPSBkYXlJdGVyYXRvci5nZXRVVENEYXkoKTsK
KyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsK
KyAgICB2YXIgc3RhcnRPZmZzZXQgPSB3ZWVrU3RhcnREYXkgLSBtb250aFN0YXJ0RGF5OworICAg
IGlmIChzdGFydE9mZnNldCA+PSAwKQorICAgICAgICBzdGFydE9mZnNldCAtPSA3OworICAgIGRh
eUl0ZXJhdG9yLnNldFVUQ0RhdGUoc3RhcnRPZmZzZXQgKyAxKTsKKyAgICBmb3IgKHZhciB3ID0g
MDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgeworICAgICAgICBmb3IgKHZhciBkID0gMDsg
ZCA8IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGl0ZXJZZWFyID0gZGF5SXRlcmF0b3IuZ2V0
VVRDRnVsbFllYXIoKTsKKyAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBkYXlJdGVyYXRvci5n
ZXRVVENNb250aCgpOworICAgICAgICAgICAgdmFyIHRpbWUgPSBkYXlJdGVyYXRvci5nZXRUaW1l
KCk7CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2RheXNbd11bZF07CisgICAgICAg
ICAgICAvLyBGSVhNRTogTmVlZCBsb2NhbGl6ZWQgbnVtYmVyPworICAgICAgICAgICAgZWxlbWVu
dC5pbm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKKyAgICAgICAg
ICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ2xhc3MuRGF5OworICAgICAgICAgICAgZWxlbWVudC5k
YXRhc2V0LnN1Ym1pdFZhbHVlID0gc2VyaWFsaXplRGF0ZShpdGVyWWVhciwgaXRlck1vbnRoLCBk
YXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOworICAgICAgICAgICAgaWYgKG91dE9mUmFuZ2UodGlt
ZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3MuVW5hdmFp
bGFibGUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdGVwTWlzbWF0Y2godGltZSkpIHsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3MuVW5hdmFpbGFibGUpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0geWVhciAmJiBkYXlJdGVyYXRvci5n
ZXRVVENNb250aCgpIDwgbW9udGgpIHx8IChtb250aCA9PSAwICYmIGl0ZXJNb250aCA9PSAxMSkp
IHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3MuQXZhaWxhYmxl
KTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3MuTm90VGhpc01v
bnRoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKGl0ZXJZZWFyID09IHllYXIgJiYgZGF5SXRl
cmF0b3IuZ2V0VVRDTW9udGgoKSA+IG1vbnRoKSB8fCAobW9udGggPT0gMTEgJiYgaXRlck1vbnRo
ID09IDApKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzLkF2
YWlsYWJsZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzLk5v
dFRoaXNNb250aCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHRpbWUpKSB7CisgICAg
ICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSAnLSc7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENsYXNzLlVuYXZhaWxhYmxlKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzLkF2YWlsYWJs
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkYXlJdGVyYXRvci5zZXRVVENEYXRlKGRh
eUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSArIDEpOworICAgICAgICB9CisgICAgfQorCisgICAgZ2xv
YmFsLnRvZGF5LmRpc2FibGVkID0gIWlzVmFsaWREYXRlKHBhcnNlRGF0ZVN0cmluZygpLmdldFRp
bWUoKSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0ge251
bWJlcn0gbW9udGgKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5fbmF2aWdhdGVUb01vbnRoID0g
ZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5z
ZXRZZWFyTW9udGgoeWVhciwgbW9udGgpOworICAgIHRoaXMuX3JlbmRlck1vbnRoKHllYXIsIG1v
bnRoKTsKK307CisKKy8qKgorICogQHBhcmFtIHtudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7bnVt
YmVyfSBtb250aAorICogQHBhcmFtIHtib29sZWFufSByaWdodCBmYWxzZTpsZWZ0LCB0cnVlOnJp
Z2h0CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRp
b24gPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgeworICAgIGlmICh0aGlzLl9jdXJyZW50WWVhciA+
PSAwICYmIHRoaXMuX2N1cnJlbnRNb250aCA+PSAwKSB7CisgICAgICAgIGlmICh5ZWFyID09IHRo
aXMuX2N1cnJlbnRZZWFyICYmIG1vbnRoID09IHRoaXMuX2N1cnJlbnRNb250aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdmFyIGRlY3JlYXNpbmcgPSBmYWxzZTsKKyAgICAgICAgaWYg
KHllYXIgPCB0aGlzLl9jdXJyZW50WWVhcikgeworICAgICAgICAgICAgZGVjcmVhc2luZyA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAoeWVhciA+IHRoaXMuX2N1cnJlbnRZZWFyKSB7CisgICAg
ICAgICAgICBkZWNyZWFzaW5nID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBkZWNyZWFzaW5nID0gbW9udGggPCB0aGlzLl9jdXJyZW50TW9udGg7CisgICAgICAgIH0KKyAg
ICAgICAgdmFyIGRheXNTdHlsZSA9IHRoaXMuX2RheXNDb250YWluZXIuc3R5bGU7CisgICAgICAg
IGRheXNTdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CisgICAgICAgIGRheXNTdHlsZS53ZWJr
aXRUcmFuc2l0aW9uID0gJ2xlZnQgMC4xcyBlYXNlJzsKKyAgICAgICAgZGF5c1N0eWxlLmxlZnQg
PSAoZGVjcmVhc2luZyA/ICcnIDogJy0nKSArIHRoaXMuX2RheXNDb250YWluZXIub2Zmc2V0V2lk
dGggKyAncHgnOworICAgIH0KKyAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGgoeWVhciwgbW9udGgp
OworfTsKKworRGF5c1RhYmxlLnByb3RvdHlwZS5fbW92ZUluRGF5cyA9IGZ1bmN0aW9uKCkgewor
ICAgIHZhciBkYXlzU3R5bGUgPSB0aGlzLl9kYXlzQ29udGFpbmVyLnN0eWxlOworICAgIGlmIChk
YXlzU3R5bGUubGVmdCA9PSAnMHB4JykKKyAgICAgICAgcmV0dXJuOworICAgIGRheXNTdHlsZS53
ZWJraXRUcmFuc2l0aW9uID0gJyc7CisgICAgZGF5c1N0eWxlLmxlZnQgPSAoZGF5c1N0eWxlLmxl
ZnQuY2hhckF0KDApID09ICctJyA/ICcnIDogJy0nKSArIHRoaXMuX2RheXNDb250YWluZXIub2Zm
c2V0V2lkdGggKyAncHgnOworICAgIHRoaXMuX2RheXNDb250YWluZXIub2Zmc2V0TGVmdDsgLy8g
Rm9yY2UgdG8gbGF5b3V0LgorICAgIGRheXNTdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gJ2xlZnQg
MC4xcyBlYXNlJzsKKyAgICBkYXlzU3R5bGUubGVmdCA9ICcwcHgnOworfTsKKworRGF5c1RhYmxl
LnByb3RvdHlwZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9uUG9zaXRpb24gPSBmdW5j
dGlvbih5ZWFyLCBtb250aCkgeworICAgIGlmICh5ZWFyID09IHRoaXMuX2N1cnJlbnRZZWFyICYm
IG1vbnRoID09IHRoaXMuX2N1cnJlbnRNb250aCkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXMu
X25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgpOworICAgIGlmICh0aGlz
Ll9sYXN0WSA+IDAgJiYgdGhpcy5feCA+IDApCisgICAgICAgIHRoaXMuX2RheXNbdGhpcy5fbGFz
dFldW3RoaXMuX3hdLmNsYXNzTGlzdC5hZGQoQ2xhc3MuU2VsZWN0ZWQpOworfTsKKworLyoqCisg
KiBAcGFyYW0ge0RhdGV9IGRhdGUKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5zZWxlY3REYXRl
ID0gZnVuY3Rpb24oZGF0ZSkgeworICAgIHRoaXMuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRp
b24oZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCkpOworICAgIHZhciBk
YXRlU3RyaW5nID0gc2VyaWFsaXplRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0
VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCkpOworICAgIGZvciAodmFyIHcgPSAwOyB3IDwg
RGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsg
ZCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZGF5c1t3XVtkXS5kYXRhc2V0LnN1Ym1pdFZh
bHVlID09IGRhdGVTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICB0aGlzLl9kYXlzW3ddW2RdLmNs
YXNzTGlzdC5hZGQoQ2xhc3MuU2VsZWN0ZWQpOworICAgICAgICAgICAgICAgIHRoaXMuX3ggPSBk
OworICAgICAgICAgICAgICAgIHRoaXMuX3kgPSB3OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworRGF5c1RhYmxlLnByb3RvdHlw
ZS5fbWF5YmVTZXRQcmV2aW91c01vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHllYXIgPSBn
bG9iYWwueWVhck1vbnRoQ29udHJvbGxlci55ZWFyKCk7CisgICAgdmFyIG1vbnRoID0gZ2xvYmFs
LnllYXJNb250aENvbnRyb2xsZXIubW9udGgoKTsKKyAgICB2YXIgdGhpc01vbnRoU3RhcnRUaW1l
ID0gRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpOworICAgIGlmIChnbG9iYWwubWluaW11bURhdGUu
Z2V0VGltZSgpID49IHRoaXNNb250aFN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtb250aCA9PSAwKSB7CisgICAgICAgIHllYXItLTsKKyAgICAgICAgbW9udGggPSAx
MTsKKyAgICB9IGVsc2UgeworICAgICAgICBtb250aC0tOworICAgIH0KKyAgICB0aGlzLl9uYXZp
Z2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K307CisKK0RheXNUYWJsZS5wcm90b3R5cGUuX21heWJlU2V0TmV4dE1vbnRoID0gZnVuY3Rpb24o
KSB7CisgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci55ZWFyKCk7Cisg
ICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIubW9udGgoKTsKKyAgICBp
ZiAobW9udGggPT0gMTEpIHsKKyAgICAgICAgeWVhcisrOworICAgICAgICBtb250aCA9IDA7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbW9udGgrKzsKKyAgICB9CisgICAgdmFyIG5leHRNb250aFN0
YXJ0VGltZSA9IERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKKyAgICBpZiAoZ2xvYmFsLm1heGlt
dW1EYXRlLmdldFRpbWUoKSA8IG5leHRNb250aFN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHRoaXMuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgp
OworICAgIHJldHVybiB0cnVlOworfTsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAor
ICovCitEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVEYXlDbGljayA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci55ZWFyKCk7Cisg
ICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIubW9udGgoKTsKKyAgICB2
YXIgY2xhc3NMaXN0ID0gZXZlbnQudGFyZ2V0LmNsYXNzTGlzdDsKKyAgICBpZiAoY2xhc3NMaXN0
LmNvbnRhaW5zKENsYXNzLlVuYXZhaWxhYmxlVXApKSB7CisgICAgICAgIHRoaXMuX21heWJlU2V0
UHJldmlvdXNNb250aCgpOworICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNz
LlVuYXZhaWxhYmxlRG93bikpIHsKKyAgICAgICAgdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoKTsK
KyAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucyhDbGFzcy5BdmFpbGFibGUpKSB7Cisg
ICAgICAgIHN1Ym1pdFZhbHVlKGV2ZW50LnRhcmdldC5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKKyAg
ICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQKKyAqLworRGF5c1Rh
YmxlLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdmVyID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB2
YXIgbm9kZSA9IGV2ZW50LnRhcmdldDsKKyAgICBpZiAodGhpcy5feCA+PSAwICYmIHRoaXMuX3kg
Pj0gMCkKKyAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlzLl94XS5jbGFzc0xpc3QucmVt
b3ZlKENsYXNzLlNlbGVjdGVkKTsKKyAgICBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENs
YXNzLkRheSkpIHsKKyAgICAgICAgdGhpcy5feCA9IC0xOworICAgICAgICB0aGlzLl95ID0gLTE7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbm9kZS5jbGFzc0xpc3QuYWRkKENsYXNzLlNl
bGVjdGVkKTsKKyAgICB0aGlzLl94ID0gTnVtYmVyKG5vZGUuZGF0YXNldC5wb3NpdGlvblgpOwor
ICAgIHRoaXMuX3kgPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBvc2l0aW9uWSk7Cit9OworCisvKioK
KyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdXQgPSBmdW5jdGlvbihldmVu
dCkgeworICAgIGlmICh0aGlzLl94ID49IDAgJiYgdGhpcy5feSA+PSAwKQorICAgICAgICB0aGlz
Ll9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3MuU2VsZWN0ZWQp
OworICAgIHRoaXMuX3ggPSAtMTsKKyAgICB0aGlzLl95ID0gLTE7Cit9OworCisvKioKKyAqIEBw
YXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFu
ZGxlS2V5ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsK
KyAgICB2YXIgeCA9IHRoaXMuX3g7CisgICAgdmFyIHkgPSB0aGlzLl95OworICAgIHZhciBsb2Nh
dGVkID0geCA+PSAwICYmIHkgPj0gIDA7CisgICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZp
ZXI7CisgICAgaWYgKCFsb2NhdGVkICYmIChrZXkgPT0gJ0xlZnQnIHx8IGtleSA9PSAnVXAnIHx8
IGtleSA9PSAnUmlnaHQnIHx8IGtleSA9PSAnRG93bicpKSB7CisgICAgICAgIC8vIFB1dCB0aGUg
c2VsZWN0aW9uIG9uIGEgY2VudGVyIGNlbGwuCisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9u
KGV2ZW50LCAzLCBNYXRoLmZsb29yKERheXNUYWJsZS5fV2Vla3MgLyAyIC0gMSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleSA9PSAnTGVmdCcpIHsKKyAgICAgICAgaWYg
KHggPT0gMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAgICAgICAgIGlm
ICghdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB5ID0gRGF5c1RhYmxlLl9XZWVrcyAtIDE7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHktLTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHggPSA2OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeC0tOworICAgICAg
ICB9CisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAnVXAnKSB7CisgICAgICAgIGlmICh5ID09IDApIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgeSA9IERheXNUYWJsZS5fV2Vla3MgLSAxOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgeS0tOworICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlU2Vs
ZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAnUmlnaHQnKSB7Cisg
ICAgICAgIGlmICh4ID09IDYpIHsKKyAgICAgICAgICAgIGlmICh5ID09IERheXNUYWJsZS5fV2Vl
a3MgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldE5leHRNb250aCgp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgeSA9IDA7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHkrKzsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHggPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeCsrOwor
ICAgICAgICB9CisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAg
ICB9IGVsc2UgaWYgKGtleSA9PSAnRG93bicpIHsKKyAgICAgICAgaWYgKHkgPT0gRGF5c1RhYmxl
Ll9XZWVrcyAtIDEpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHkrKzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnVwZGF0
ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gJ1BhZ2VVcCcp
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwor
ICAgIH0gZWxzZSBpZiAoa2V5ID09ICdQYWdlRG93bicpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9t
YXliZVNldE5leHRNb250aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnVw
ZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgfSBlbHNlIGlmIChsb2NhdGVkICYmIGtl
eSA9PSAnRW50ZXInKSB7CisgICAgICAgIHZhciBkYXlOb2RlID0gdGhpcy5fZGF5c1t5XVt4XTsK
KyAgICAgICAgaWYgKGRheU5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzLkF2YWlsYWJsZSkp
IHsKKyAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7
CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgfSBlbHNlIGlm
IChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzcy5VbmF2YWlsYWJsZVVwKSkgeworICAg
ICAgICAgICAgdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKCk7CisgICAgICAgICAgICB0aGlz
LnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisgICAgICAgIH0gZWxzZSBpZiAoZGF5Tm9k
ZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3MuVW5hdmFpbGFibGVEb3duKSkgeworICAgICAgICAg
ICAgdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoKTsKKyAgICAgICAgICAgIHRoaXMudXBkYXRlU2Vs
ZWN0aW9uKGV2ZW50LCB4LCB5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoa2V5ID09ICdV
KzAwNTQnKSB7IC8vICd0JworICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNs
YXNzTGlzdC5yZW1vdmUoQ2xhc3MuU2VsZWN0ZWQpOworICAgICAgICB0aGlzLnNlbGVjdERhdGUo
bmV3IERhdGUoKSk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0KK307CisKK0RheXNUYWJsZS5wcm90b3R5cGUu
dXBkYXRlU2VsZWN0aW9uID0gZnVuY3Rpb24oZXZlbnQsIHgsIHkpIHsKKyAgICBpZiAodGhpcy5f
eCA+PSAwICYmIHRoaXMuX3kgPj0gMCkKKyAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlz
Ll94XS5jbGFzc0xpc3QucmVtb3ZlKENsYXNzLlNlbGVjdGVkKTsKKyAgICBpZiAoeCA+PSAwICYm
IHkgPj0gMCkgeworICAgICAgICB0aGlzLl9kYXlzW3ldW3hdLmNsYXNzTGlzdC5hZGQoQ2xhc3Mu
U2VsZWN0ZWQpOworICAgICAgICB0aGlzLl94ID0geDsKKyAgICAgICAgdGhpcy5feSA9IHk7Cisg
ICAgfQorICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGhhbmRsZVRvZGF5KCkgeworICAg
IHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICBnbG9iYWwuZGF5c1RhYmxlLnNlbGVjdERhdGUo
ZGF0ZSk7CisgICAgc3VibWl0VmFsdWUoc2VyaWFsaXplRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCks
IGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTsKK30KKworZnVuY3Rpb24gaGFuZGxl
Q2xlYXIoKSB7CisgICAgc3VibWl0VmFsdWUoJycpOworfQorCisvKioKKyAqIEBwYXJhbSB7c3Ry
aW5nfSB2YWx1ZQorICovCitmdW5jdGlvbiBzdWJtaXRWYWx1ZSh2YWx1ZSkgeworICAgIHdpbmRv
dy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoMCwgdmFsdWUpOworfQorCitmdW5jdGlvbiBoYW5kbGVD
YW5jZWwoKSB7CisgICAgd2luZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgtMSwgJycpOworfQor
CisvKioKKyAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gaGFu
ZGxlR2xvYmFsS2V5KGV2ZW50KSB7CisgICAgbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCk7CisgICAg
dmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7CisgICAgaWYgKGtleSA9PSAnVSswMDA5Jykg
eworICAgICAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQg
PT0gZ2xvYmFsLmxhc3RGb2N1c2FibGVDb250cm9sKSB7CisgICAgICAgICAgICBldmVudC5zdG9w
UHJvcGFnYXRpb24oKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAg
ICAgICAgICBnbG9iYWwuZmlyc3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9i
YWwuZmlyc3RGb2N1c2FibGVDb250cm9sKSB7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFn
YXRpb24oKTsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAg
ICBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSBpZiAoa2V5ID09ICdVKzAwNEQnKSB7IC8vIG0KKyAgICAgICAgZ2xvYmFsLnllYXJNb250
aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhDb250
cm9sbGVyLlBSRVZJT1VTX01PTlRIIDogWWVhck1vbnRoQ29udHJvbGxlci5ORVhUX01PTlRIKTsK
KyAgICB9IGVsc2UgaWYgKGtleSA9PSAnVSswMDU5JykgeyAvLyB5CisgICAgICAgIGdsb2JhbC55
ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1v
bnRoQ29udHJvbGxlci5QUkVWSU9VU19ZRUFSIDogWWVhck1vbnRoQ29udHJvbGxlci5ORVhUX1lF
QVIpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICdVKzAwNDQnKSB7IC8vIGQKKyAgICAgICAgZ2xv
YmFsLnllYXJNb250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZ
ZWFyTW9udGhDb250cm9sbGVyLlBSRVZJT1VTXzEwWUVBUlMgOiBZZWFyTW9udGhDb250cm9sbGVy
Lk5FWFRfMTBZRUFSUyk7CisgICAgfQorfQorCitmdW5jdGlvbiBtYXliZVVwZGF0ZUZvY3VzU3R5
bGUoKSB7CisgICAgaWYgKGdsb2JhbC5oYWRLZXlFdmVudCkKKyAgICAgICAgcmV0dXJuOworICAg
IGdsb2JhbC5oYWRLZXlFdmVudCA9IHRydWU7CisgICAgJCgnbWFpbicpLmNsYXNzTGlzdC5yZW1v
dmUoQ2xhc3MuTm9Gb2N1c1JpbmcpOworfQorCitpZiAod2luZG93LmRpYWxvZ0FyZ3VtZW50cykg
eworICAgIGluaXRpYWxpemUoZGlhbG9nQXJndW1lbnRzKTsKK30gZWxzZSB7CisgICAgd2luZG93
LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVNZXNzYWdlLCBmYWxzZSk7CisgICAg
d2luZG93LnNldFRpbWVvdXQoaGFuZGxlQXJndW1lbnRzVGltZW91dCwgMTAwMCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGMxZDk3NTc3NjRhNGRiMGMzMmJm
NWFjZTA0Y2Y4MTYwZmFiZWExNDAuLjRkYzE5MDkyZmEwZmJjNGUxNDc3NTc0NTJhMzE5ZWMwMmM2
NGM1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC04NDEsNiAr
ODQxLDI1IEBACiAgICAgICAgICAgXSwKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAg
ICdhY3Rpb25fbmFtZSc6ICdDYWxlbmRhclBpY2tlcicsCisgICAgICAgICAgJ2lucHV0cyc6IFsK
KyAgICAgICAgICAgICcuLi9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzJywKKyAgICAgICAg
ICAgICcuLi9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMnLAorICAgICAgICAgIF0sCisgICAg
ICAgICAgJ291dHB1dHMnOiBbCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5jcHAnLAorICAgICAgICAgIF0sCisg
ICAgICAgICAgJ2FjdGlvbic6IFsKKyAgICAgICAgICAgICdweXRob24nLAorICAgICAgICAgICAg
Jy4uL21ha2UtZmlsZS1hcnJheXMucHknLAorICAgICAgICAgICAgJy0tY29uZGl0aW9uPUVOQUJM
RShDQUxFTkRBUl9QSUNLRVIpJywKKyAgICAgICAgICAgICctLW91dC1oPTwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5oJywKKyAgICAgICAgICAgICctLW91
dC1jcHA9PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmNw
cCcsCisgICAgICAgICAgICAnPEAoX2lucHV0cyknLAorICAgICAgICAgIF0sCisgICAgICAgIH0s
CisgICAgICAgIHsKICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnWExpbmtOYW1lcycsCiAgICAg
ICAgICAgJ2lucHV0cyc6IFsKICAgICAgICAgICAgICcuLi9kb20vbWFrZV9uYW1lcy5wbCcsCkBA
IC0xMDc3LDYgKzEwOTYsNyBAQAogICAgICAgICAjIEFkZGl0aW9uYWwgLmNwcCBmaWxlcyBmcm9t
IHdlYmNvcmVfYmluZGluZ3Nfc291cmNlcyBhY3Rpb25zLgogICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2Via2l0L0hUTUxFbGVtZW50RmFjdG9yeS5jcHAnLAogICAgICAgICAn
PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0hUTUxOYW1lcy5jcHAnLAorICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmNwcCcs
CiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvRXZlbnRGYWN0b3J5
LmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvRXZlbnRI
ZWFkZXJzLmgnLAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0V2
ZW50SW50ZXJmYWNlcy5oJywKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRl
eCA1Mzc4YTA3YzYzYzBjNDYyZTg1NjlkNmVmNjlkNzk5NmYyYzJmYmNiLi41ZTllYzliZDk2ZDVj
NWI2Y2I0NjkzOGE1NjMzYmRiOGMwZDYxMzJjIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDQtMDMgIEtlbnQgVGFtdXJhICA8dGtl
bnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBKYXZhU2NyaXB0IGFuZCBDU1MgY29kZSBm
b3IgdGhlIGNhbGVuZGFyIHBpY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMwMTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFy
LXBpY2tlci5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wMiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XVtXSzJdIFNldCB1cCBwbHVnaW4gcHJvY2Vz
cyBvbiBVbml4CmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIu
aHRtbCBiL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE0MjVlODg5NmQyMDJmNWMyODExN2ExZGE4NzAzMDg1OGFiM2E5YjQKLS0tIC9kZXYvbnVsbAor
KysgYi9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbApAQCAtMCwwICsxLDgy
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PXV0Zi04
PgorPHRpdGxlPkNhbGVuZGFyIFBpY2tlciB0ZXN0PC90aXRsZT4KKzxzdHlsZT4KK2JvZHkgewor
ICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWZmZmY7Cit9CitpZnJhbWUgeworICAgIHotaW5kZXg6
IDIxNDc0ODM2NDc7CisgICAgd2lkdGg6IDI5MHB4OworICAgIGhlaWdodDogMjU2cHg7CisgICAg
Ym9yZGVyOiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9Cis8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+CisKKzxwPlRoaXMgaXMgYSB0ZXN0YmVkIGZvciBhIGNhbGVuZGFyIHBpY2tlci48L3A+
CisKKzxkaXY+PGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlIj48L2Rpdj4KKzxpZnJhbWU+PC9p
ZnJhbWU+CisKKzxvbCBpZD0iY29uc29sZSIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsi
PgorPC9vbD4KKworPHNjcmlwdD4KK3ZhciBmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdpZnJhbWUnKVswXTsKK3ZhciBkb2MgPSBmcmFtZS5jb250ZW50RG9jdW1lbnQ7Citk
b2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9ICc8aGVhZD48L2hlYWQ+PGJvZHk+PGRpdiBp
ZD1tYWluPkxvYWRpbmcuLi48L2Rpdj48L2JvZHk+JzsKK3ZhciBsaW5rID0gZG9jLmNyZWF0ZUVs
ZW1lbnQoJ2xpbmsnKTsKK2xpbmsucmVsID0gJ3N0eWxlc2hlZXQnOworbGluay5ocmVmID0gJy4u
Ly4uL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3M/JyArIChuZXcg
RGF0ZSgpKS5nZXRUaW1lKCk7Citkb2MuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKK3ZhciBzY3Jp
cHQgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CitzY3JpcHQuc3JjID0gJy4uLy4uL1Nv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcz8nICsgKG5ldyBEYXRlKCkp
LmdldFRpbWUoKTsKK2RvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CisKK3ZhciBlbmdsaXNo
QXJndW1lbnRzID0geworICAgIGxvY2FsZTogJ2VuLVVTJywKKyAgICBtb250aExhYmVscyA6IFsn
SmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsCisg
ICAgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywg
J0RlY2VtYmVyJ10sCisgICAgZGF5TGFiZWxzIDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQn
LCAnVGh1JywgJ0ZyaScsICdTYXQnXSwKKyAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAgICBj
bGVhckxhYmVsIDogJ0NsZWFyJywKKyAgICBjYW5jZWxMYWJlbCA6ICdDYW5jZWwnLAorICAgIHdl
ZWtTdGFydERheSA6IDAsCisgICAgc3RlcCA6IDEsCisgICAgbWF4IDogJzIwOTktMTItMzEnLAor
fTsKK3ZhciBqYXBhbmVzZUFyZ3VtZW50cyA9IHsKKyAgICBsb2NhbGU6ICdqYS1KUCcsCisgICAg
bW9udGhMYWJlbHMgOiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc2
5pyIJywKKyAgICAnN+aciCcsICc45pyIJywgJznmnIgnLCAnMTDmnIgnLCAnMTHmnIgnLCAnMTLm
nIgnXSwKKyAgICBkYXlMYWJlbHMgOiBbJ+aXpScsICfmnIgnLCAn54GrJywgJ+awtCcsICfmnKgn
LCAn6YeRJywgJ+WcnyddLAorICAgIHRvZGF5TGFiZWwgOiAn5LuK5pelJywKKyAgICBjbGVhckxh
YmVsIDogJ+OCr+ODquOCoicsCisgICAgY2FuY2VsTGFiZWwgOiAn5Y+W44KK5raI44GXJywKKyAg
ICB3ZWVrU3RhcnREYXkgOiAwLAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDk5LTAzLTE1
JywKK307CitzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgIGZyYW1lLmNvbnRlbnRXaW5kb3cu
cG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZW5nbGlzaEFyZ3VtZW50cyksICIqIik7CisgICAg
ZnJhbWUuY29udGVudFdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAgPSBmdW5jdGlvbihudW1W
YWx1ZSwgc3RyaW5nVmFsdWUpIHsKKyAgICAgICAgd2luZG93LmxvZygnbnVtYmVyPScgKyBudW1W
YWx1ZSArICcsIHN0cmluZz0iJyArIHN0cmluZ1ZhbHVlICsgJyInKTsKKyAgICAgICAgaWYgKG51
bVZhbHVlID09IDApCisgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2RhdGUnKS52YWx1ZSA9IHN0cmluZ1ZhbHVlOworICAgIH07Cit9LCAxMDApOworCisKK2Z1bmN0
aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIgZW50cnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCds
aScpOworICAgIGVudHJ5LmlubmVyVGV4dCA9IHN0cjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGVudHJ5KTsKK30KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135750</attachid>
            <date>2012-04-04 20:27:21 -0700</date>
            <delta_ts>2012-04-04 23:22:46 -0700</delta_ts>
            <desc>Patch 3</desc>
            <filename>bug-83011-20120405122719.patch</filename>
            <type>text/plain</type>
            <size>46010</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiMjA5MGNkYmQ4NTll
MTYxYjQxN2IyMjRhM2M4ZjczYWY0NzExNy4uNGVlNWM4ODkxZjgxOTUwZjdiYmUyZjViNGI4MzQy
MDA3YzI4M2JmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgSmF2YVNjcmlwdCBh
bmQgQ1NTIGNvZGUgZm9yIHRoZSBjYWxlbmRhciBwaWNrZXIgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDExCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGVuZGFyUGlj
a2VyLmpzIGFuZCBjYWxlbmRhclBpY2tlci5jc3MsIGFuZCBhZGQgYSBidWlsZCBydWxlIHRvCisg
ICAgICAgIGdlbmVyYXRlIGEgQysrIGZpbGUuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgbWFrZSBhbnkg
YmVoYXZpb3IgY2hhbmdlCisgICAgICAgIGJlY2F1c2UgdGhlIGNvZGUgaXMgd3JhcHBlZCBieSBF
TkFCTEUoQ0FMRU5EQVJfUElDS0VSKS4KKworICAgICAgICBUZXN0czogTWFudWFsVGVzdHMvZm9y
bXMvY2FsZW5kYXItcGlja2VyLmh0bWwKKworICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBp
Y2tlci5jc3M6IEFkZGVkLgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5qczog
QWRkZWQuCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEdlbmVyYXRlIENhbGVu
ZGFyUGlja2VyLntjcHAsaH0gZnJvbSBjYWxlbmRhclBpY2tlci57Y3NzLGpzfS4KKwogMjAxMi0w
NC0wNCAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFdhdmVU
YWJsZTo6d2F2ZURhdGFGb3JGdW5kYW1lbnRhbEZyZXF1ZW5jeSgpIHNob3VsZCBwcm9wZXJseSBp
bnRlcnByZXQgbmVnYXRpdmUgZnJlcXVlbmN5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9S
ZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmI1OTQzMWZhZjc5NGJiNzYxMTdmNzcwYjAw
ODg5MDZhMzNjOWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L2NhbGVuZGFyUGlja2VyLmNzcwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2JvZHkgeworICAgIC13ZWJraXQt
dXNlci1zZWxlY3Q6IG5vbmU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlOworICAgIGZv
bnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDsKKyAgICBtYXJnaW46IDA7CisgICAgb3ZlcmZsb3c6
IGhpZGRlbjsKK30KKworLm5vLWZvY3VzLXJpbmcgOmZvY3VzIHsKKyAgICBvdXRsaW5lOiBub25l
OworfQorCisjbWFpbiB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVy
OiBzb2xpZCAxcHggIzg4OTlhYTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAycHggMnB4IDJweCB3
aGl0ZSwKKyAgICAgICAgaW5zZXQgLTJweCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMSk7CisgICAg
cGFkZGluZzogNnB4OworfQorCisueWVhci1tb250aC1hcmVhIHsKK30KKworLnllYXItbW9udGgt
dXBwZXIgeworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworfQorCisueWVhci1zZWxlY3RvciB7
CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgd2lkdGg6IDZlbTsKK30KKworLm1vbnRoLXNl
bGVjdG9yLWJveCB7CisgICAgZGlzcGxheTogaW5saW5lLWJveDsKKyAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7CisgICAgLXdlYmtpdC1ib3gtZmxleDogMjsKK30KKworLm1vbnRoLXNlbGVjdG9yIHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHBhZGRpbmc6IDNweCA2cHggM3B4IDZweDsKK30K
Ky5tb250aC1zZWxlY3RvcjphZnRlciB7CisgICAgY29udGVudDogIiDilrwiOworICAgIGZvbnQt
c2l6ZTogc21hbGxlcjsKK30KKworLm1vbnRoLXNlbGVjdG9yLXBvcHVwIHsKKyAgICBkaXNwbGF5
OiBub25lOworICAgIG91dGxpbmU6IG5vbmU7CisgICAgei1pbmRleDogMjsKK30KKworLm1vbnRo
LXNlbGVjdG9yLXdhbGwgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgaGVpZ2h0OiAxMDAlOwor
ICAgIGxlZnQ6IDBweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwcHg7Cisg
ICAgd2lkdGg6IDEwMCU7Cit9CisKKy8qIEZJWE1FOiBXZSdkIGxpa2UgdG8gdXNlIHRoZSBzdGFu
ZGFyZCBidXR0b24gYXBwZWFyYW5jZSBmb3Igbm9uLU1hYy4gKi8KKy55ZWFyLW1vbnRoLWJ1dHRv
biB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGJhY2tncm91bmQ6IC13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZSksIGNv
bG9yLXN0b3AoMC40LCAjZmZmKSwgY29sb3Itc3RvcCgwLjYsICNkZGRkZGQpLCB0bygjZWVlKSk7
CisgICAgYm9yZGVyOiBzb2xpZCAxcHggIzQ0NDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cisg
ICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpLCBp
bnNldCAtMXB4IC0xcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsKKyAgICBwYWRkaW5nLWxl
ZnQ6IDNweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRv
bjpob3ZlciB7CisgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQg
dG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZTBmMGZmKSwgY29sb3Itc3RvcCgwLjQsICNlMGYwZmYp
LCBjb2xvci1zdG9wKDAuNiwgI2IwZTBmZiksIHRvKCNiMGUwZmYpKTsKKyAgICBib3JkZXI6IHNv
bGlkIDFweCAjNDQ4OworfQorCisueWVhci1tb250aC1idXR0b246YWN0aXZlIHsKKyAgICBib3Jk
ZXI6IHNvbGlkIDFweCBibGFjazsKKyAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDFweCBy
Z2JhKDAsMCwwLDAuMyksIGluc2V0IC0xcHggLTFweCAxcHggcmdiYSgwLDAsMCwwLjMpOworfQor
CisueWVhci1tb250aC1idXR0b246ZGlzYWJsZWQgeworICAgIGNvbG9yOiAjODg4OworICAgIGJh
Y2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20s
IGZyb20oI2VlZSksIGNvbG9yLXN0b3AoMC40LCAjZmZmKSwgY29sb3Itc3RvcCgwLjYsICNkZGRk
ZGQpLCB0bygjZWVlKSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAxcHggMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNCksIGluc2V0IC0xcHgg
LTFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpOworfQorCisueWVhci1tb250aC1idXR0b24t
bGVmdCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisueWVhci1tb250aC1idXR0
b24tcmlnaHQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLmRheXMtYXJlYS1j
b250YWluZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogc29s
aWQgMXB4IGJsYWNrOworICAgIG1hcmdpbi1ib3R0b206IDRweDsKKyAgICBtYXJnaW4tdG9wOiA0
cHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLmRheXMtYXJlYSB7IC8qIDx0YWJsZT4g
Ki8KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItY29sbGFwc2U6IHNl
cGFyYXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgZm9udDogLXdlYmtpdC1zbWFs
bC1jb250cm9sOworICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CisgICAgd2lkdGg6IDEwMCU7Cit9
CisKKy5kYXktbGFiZWwgeyAvKiA8dGg+ICovCisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94OworICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U5ZmY7CisgICAgYm9yZGVyLWxlZnQt
Y29sb3I6ICNmMGY0ZmY7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogI2YwZjRmZjsKKyAgICBib3Jk
ZXI6IHNvbGlkIDFweCAjZDBkNGYwOworICAgIGNvbG9yOiAjMjBjOworICAgIGZvbnQtd2VpZ2h0
OiBub3JtYWw7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuZGF5IHsgLyogPHRkPiAq
LworICAgIHBhZGRpbmc6IDFweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgLXdl
YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCisuYXZhaWxhYmxlIHsKKyAgICBjdXJz
b3I6IGRlZmF1bHQ7CisgICAgZm9udC13ZWlnaHQ6IDcwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgICBib3JkZXItcmFkaXVz
OiA1cHg7CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOworfQorCisubm90
LXRoaXMtbW9udGggeworICAgIGNvbG9yOiBncmF5dGV4dDsKKyAgICBmb250LXdlaWdodDogNDAw
OworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCisuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogaGlnaGxpZ2h0OworICAgIGNvbG9yOiBoaWdobGlnaHR0
ZXh0OworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCisudW5hdmFpbGFibGUgeworICAgIGN1
cnNvcjogZGVmYXVsdDsKKyAgICBjb2xvcjogZ3JheXRleHQ7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogI2VlZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOworICAgIC13ZWJraXQtdHJhbnNp
dGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTsKK30KKworLnVuYXZhaWxhYmxlLmRheS1zZWxl
Y3RlZCB7CisgICAgYm9yZGVyOiAxcHggc29saWQgaGlnaGxpZ2h0OworfQorCisuY2FuY2VsLWJ1
dHRvbiB7CisgICAgZmxvYXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkOWJkNGNjZGQzZDE3MzIzYzY1ODNjZWMxZGEy
N2U3NWQwNmQzMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
Y2FsZW5kYXJQaWNrZXIuanMKQEAgLTAsMCArMSwxMDUwIEBACisidXNlIHN0cmljdCI7CisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklY
TUU6CisvLyAgLSBSVEwKKy8vICAtIFRvdWNoIGV2ZW50CisKKy8qKgorICogQ1NTIGNsYXNzIG5h
bWVzLgorICoKKyAqIEBlbnVtIHtzdHJpbmd9CisgKi8KK3ZhciBDbGFzc05hbWVzID0geworICAg
IEF2YWlsYWJsZTogImF2YWlsYWJsZSIsCisgICAgQ2FuY2VsQnV0dG9uOiAiY2FuY2VsLWJ1dHRv
biIsCisgICAgQ2xlYXJCdXR0b246ICJjbGVhci1idXR0b24iLAorICAgIERheTogImRheSIsCisg
ICAgRGF5TGFiZWw6ICJkYXktbGFiZWwiLAorICAgIERheUxhYmVsQ29udGFpbmVyOiAiZGF5LWxh
YmVsLWNvbnRhaW5lciIsCisgICAgRGF5c0FyZWE6ICJkYXlzLWFyZWEiLAorICAgIERheXNBcmVh
Q29udGFpbmVyOiAiZGF5cy1hcmVhLWNvbnRhaW5lciIsCisgICAgTW9udGhTZWxlY3RvcjogIm1v
bnRoLXNlbGVjdG9yIiwKKyAgICBNb250aFNlbGVjdG9yQm94OiAibW9udGgtc2VsZWN0b3ItYm94
IiwKKyAgICBNb250aFNlbGVjdG9yUG9wdXA6ICJtb250aC1zZWxlY3Rvci1wb3B1cCIsCisgICAg
TW9udGhTZWxlY3RvcldhbGw6ICJtb250aC1zZWxlY3Rvci13YWxsIiwKKyAgICBOb0ZvY3VzUmlu
ZzogIm5vLWZvY3VzLXJpbmciLAorICAgIE5vdFRoaXNNb250aDogIm5vdC10aGlzLW1vbnRoIiwK
KyAgICBTZWxlY3RlZDogImRheS1zZWxlY3RlZCIsCisgICAgVG9kYXlCdXR0b246ICJ0b2RheS1i
dXR0b24iLAorICAgIFRvZGF5Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCisgICAgVW5h
dmFpbGFibGU6ICJ1bmF2YWlsYWJsZSIsCisgICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29udGFp
bmVyIiwKKyAgICBZZWFyTW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKKyAgICBZZWFyTW9u
dGhCdXR0b246ICJ5ZWFyLW1vbnRoLWJ1dHRvbiIsCisgICAgWWVhck1vbnRoQnV0dG9uTGVmdDog
InllYXItbW9udGgtYnV0dG9uLWxlZnQiLAorICAgIFllYXJNb250aEJ1dHRvblJpZ2h0OiAieWVh
ci1tb250aC1idXR0b24tcmlnaHQiLAorICAgIFllYXJNb250aFVwcGVyOiAieWVhci1tb250aC11
cHBlciIKK307CisKKy8qKgorICogQHR5cGUge09iamVjdH0KKyAqLwordmFyIGdsb2JhbCA9IHsK
KyAgICBhcmd1bWVudHNSZWNlaXZlZDogZmFsc2UsCisgICAgaGFkS2V5RXZlbnQ6IGZhbHNlLAor
ICAgIHBhcmFtczogbnVsbAorfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVXRpbGl0eSBmdW5jdGlvbnMK
KworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IGlkCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAg
ICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitmdW5jdGlvbiBiaW5k
KGZ1bmMsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKK30KKworLyoqCisgKiBA
cGFyYW0geyFzdHJpbmd9IHRhZ05hbWUKKyAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCisg
KiBAcGFyYW0ge3N0cmluZz19IG9wdF90ZXh0CisgKiBAcmV0dXJuIHshRWxlbWVudH0KKyAqLwor
ZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7Cisg
ICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGlm
IChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9j
bGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9
CisKKy8qKgorICogQHJldHVybiB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2FsZSBuYW1lLiBlLmcu
ICJlbi11cyIKKyAqLworZnVuY3Rpb24gZ2V0TG9jYWxlKCkgeworICAgIHJldHVybiAoZ2xvYmFs
LnBhcmFtcy5sb2NhbGUgfHwgImVuLXVzIikudG9Mb3dlckNhc2UoKTsKK30KKworLyoqCisgKiBA
cmV0dXJuIHshc3RyaW5nfSBsb3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5nLiAiZW4iCisgKi8K
K2Z1bmN0aW9uIGdldExhbmd1YWdlKCkgeworICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTsK
KyAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuICJlbiI7CisgICAgcmV0dXJuIHJlc3VsdFsxXTsKK30KKwor
LyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgK
KyAqIEByZXR1cm4geyFzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGZvcm1hdEphcGFuZXNlSW1wZXJp
YWxFcmEoeWVhciwgbW9udGgpIHsKKyAgICBpZiAoeWVhciA+IDE5ODkpCisgICAgICAgIHJldHVy
biAiKOW5s+aIkCIgKyAoeWVhciAtIDE5ODgpICsgIuW5tCkiOworICAgIGlmICh5ZWFyID09IDE5
ODkpCisgICAgICAgIHJldHVybiAiKOW5s+aIkOWFg+W5tCkiOworICAgIGlmICh5ZWFyID49IDE5
MjcpCisgICAgICAgIHJldHVybiAiKOaYreWSjCIgKyAoeWVhciAtIDE5MjUpICsgIuW5tCkiOwor
ICAgIGlmICh5ZWFyID4gMTkxMikKKyAgICAgICAgcmV0dXJuICIo5aSn5q2jIiArICh5ZWFyIC0g
MTkxMSkgKyAi5bm0KSI7CisgICAgaWYgKHllYXIgPT0gMTkxMiAmJiBtb250aCA+PSA3KQorICAg
ICAgICByZXR1cm4gIijlpKfmraPlhYPlubQpIjsKKyAgICBpZiAoeWVhciA+IDE4NjgpCisgICAg
ICAgIHJldHVybiAiKOaYjuayuyIgKyAoeWVhciAtIDE4NjcpICsgIuW5tCkiOworICAgIGlmICh5
ZWFyID09IDE4NjgpCisgICAgICAgIHJldHVybiAiKOaYjuayu+WFg+W5tCkiOworICAgIHJldHVy
biAiIjsKK30KKworZnVuY3Rpb24gZm9ybWF0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7CisgICAg
Ly8gRklYTUU6IE5lZWQgbG9jYWxpemVkIG51bWJlcj8KKyAgICB2YXIgeWVhclN0cmluZyA9IFN0
cmluZyh5ZWFyKTsKKyAgICB2YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1vbnRoTGFi
ZWxzW21vbnRoXTsKKyAgICBzd2l0Y2ggKGdldExhbmd1YWdlKCkpIHsKKyAgICBjYXNlICJldSI6
CisgICAgY2FzZSAiZmlsIjoKKyAgICBjYXNlICJsdCI6CisgICAgY2FzZSAibWwiOgorICAgIGNh
c2UgIm10IjoKKyAgICBjYXNlICJ0bCI6CisgICAgY2FzZSAidXIiOgorICAgICAgICByZXR1cm4g
eWVhclN0cmluZyArICIgIiArIG1vbnRoU3RyaW5nOworICAgIGNhc2UgImh1IjoKKyAgICAgICAg
cmV0dXJuIHllYXJTdHJpbmcgKyAiLiAiICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAiamEiOgor
ICAgICAgICByZXR1cm4geWVhclN0cmluZyArICLlubQiICsgZm9ybWF0SmFwYW5lc2VJbXBlcmlh
bEVyYSh5ZWFyLCBtb250aCkgKyAiICIgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICJ6aCI6Cisg
ICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuW5tCIgKyBtb250aFN0cmluZzsKKyAgICBjYXNl
ICJrbyI6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuuFhCAiICsgbW9udGhTdHJpbmc7
CisgICAgY2FzZSAibHYiOgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICIuIGcuICIgKyBt
b250aFN0cmluZzsKKyAgICBjYXNlICJwdCI6CisgICAgICAgIHJldHVybiBtb250aFN0cmluZyAr
ICIgZGUgIiArIHllYXJTdHJpbmc7CisgICAgY2FzZSAic3IiOgorICAgICAgICByZXR1cm4gbW9u
dGhTdHJpbmcgKyAiLiAiICsgeWVhclN0cmluZzsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gbW9udGhTdHJpbmcgKyAiICIgKyB5ZWFyU3RyaW5nOworICAgIH0KK30KKworLyoqCisgKiBA
cGFyYW0ge3N0cmluZz19IG9wdF9jdXJyZW50CisgKiBAcmV0dXJuIHshRGF0ZX0KKyAqLworZnVu
Y3Rpb24gcGFyc2VEYXRlU3RyaW5nKG9wdF9jdXJyZW50KSB7CisgICAgaWYgKG9wdF9jdXJyZW50
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBvcHRfY3VycmVudC5tYXRjaCgvKFxkKyktKFxkKykt
KFxkKykvKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0
ZShEYXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwgTnVtYmVyKHJlc3VsdFsyXSkgLSAxLCBOdW1i
ZXIocmVzdWx0WzNdKSkpOworICAgIH0KKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAv
LyBDcmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51bWJlcnMgYXMgbG9jYWwgZGF0ZS4KKyAgICBy
ZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgp
LCBub3cuZ2V0RGF0ZSgpKSk7Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisg
KiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0geyFudW1iZXJ9IGRheQorICogQHJl
dHVybiB7IXN0cmluZ30KKyAqLworZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh5ZWFyLCBtb250aCwg
ZGF5KSB7CisgICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmcoeWVhcik7CisgICAgaWYgKHllYXJT
dHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHllYXJTdHJp
bmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLSIgKyAoIjAiICsg
KG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAiLSIgKyAoIjAiICsgZGF5KS5zdWJzdHIoLTIs
IDIpCit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWxpemF0aW9uCisKKy8qKgorICogQHBhcmFt
IHtFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgeworICAg
IGlmIChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9i
YWwuYXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworICAgIGluaXRpYWxpemUoSlNPTi5wYXJzZShl
dmVudC5kYXRhKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQoKSB7Cisg
ICAgaWYgKGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHZh
ciBhcmdzID0geworICAgICAgICBtb250aExhYmVscyA6IFsibTEiLCAibTIiLCAibTMiLCAibTQi
LCAibTUiLCAibTYiLAorICAgICAgICAgICAgICAgICAgICAgICAibTciLCAibTgiLCAibTkiLCAi
bTEwIiwgIm0xMSIsICJtMTIiXSwKKyAgICAgICAgZGF5TGFiZWxzIDogWyJkMSIsICJkMiIsICJk
MyIsICJkNCIsICJkNSIsICJkNiIsICJkNyJdLAorICAgICAgICB0b2RheUxhYmVsIDogIlRvZGF5
IiwKKyAgICAgICAgY2xlYXJMYWJlbCA6ICJDbGVhciIsCisgICAgICAgIGNhbmNlbExhYmVsIDog
IkNhbmNlbCIsCisgICAgICAgIGN1cnJlbnRWYWx1ZSA6ICIiLAorICAgICAgICB3ZWVrU3RhcnRE
YXkgOiAwLAorICAgICAgICBzdGVwIDogMQorICAgIH07CisgICAgaW5pdGlhbGl6ZShhcmdzKTsK
K30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqIEByZXR1cm4gez9zdHJpbmd9
IEFuIGVycm9yIG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBlcnJvcnMu
CisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKKyAgICBpZiAoIWFyZ3Mu
bW9udGhMYWJlbHMpCisgICAgICAgIHJldHVybiAiTm8gbW9udGhMYWJlbHMuIjsKKyAgICBpZiAo
YXJncy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCisgICAgICAgIHJldHVybiAibW9udGhMYWJl
bHMgaXMgbm90IGFuIGFycmF5IHdpdGggMTIgZWxlbWVudHMuIjsKKyAgICBpZiAoIWFyZ3MuZGF5
TGFiZWxzKQorICAgICAgICByZXR1cm4gIk5vIGRheUxhYmVscy4iOworICAgIGlmIChhcmdzLmRh
eUxhYmVscy5sZW5ndGggIT0gNykKKyAgICAgICAgcmV0dXJuICJkYXlMYWJlbHMgaXMgbm90IGFu
IGFycmF5IHdpdGggNyBlbGVtZW50cy4iOworICAgIGlmICghYXJncy5jbGVhckxhYmVsKQorICAg
ICAgICByZXR1cm4gIk5vIGNsZWFyTGFiZWwuIjsKKyAgICBpZiAoIWFyZ3MudG9kYXlMYWJlbCkK
KyAgICAgICAgcmV0dXJuICJObyB0b2RheUxhYmVsLiI7CisgICAgaWYgKGFyZ3Mud2Vla1N0YXJ0
RGF5KSB7CisgICAgICAgIGlmIChhcmdzLndlZWtTdGFydERheSA8IDAgfHwgYXJncy53ZWVrU3Rh
cnREYXkgPiA2KQorICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIHdlZWtTdGFydERheTogIiAr
IGFyZ3Mud2Vla1N0YXJ0RGF5OworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK30KKworLyoqCisg
KiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rpb24gaW5pdGlhbGl6ZShhcmdzKSB7
CisgICAgdmFyIG1haW4gPSAkKCJtYWluIik7CisgICAgbWFpbi5jbGFzc0xpc3QuYWRkKENsYXNz
TmFtZXMuTm9Gb2N1c1JpbmcpOworCisgICAgdmFyIGVycm9yU3RyaW5nID0gdmFsaWRhdGVBcmd1
bWVudHMoYXJncyk7CisgICAgaWYgKGVycm9yU3RyaW5nKQorICAgICAgICBtYWluLnRleHRDb250
ZW50ID0gIkludGVybmFsIGVycm9yOiAiICsgZXJyb3JTdHJpbmc7CisgICAgZWxzZSB7CisgICAg
ICAgIGdsb2JhbC5wYXJhbXMgPSBhcmdzOworICAgICAgICBjaGVja0xpbWl0cygpOworICAgICAg
ICBsYXlvdXQoKTsKKworICAgICAgICB2YXIgaW5pdGlhbERhdGUgPSBwYXJzZURhdGVTdHJpbmco
YXJncy5jdXJyZW50VmFsdWUpOworICAgICAgICBpZiAoaW5pdGlhbERhdGUgPCBnbG9iYWwubWlu
aW11bURhdGUpCisgICAgICAgICAgICBpbml0aWFsRGF0ZSA9IGdsb2JhbC5taW5pbXVtRGF0ZTsK
KyAgICAgICAgZWxzZSBpZiAoaW5pdGlhbERhdGUgPiBnbG9iYWwubWF4aW11bURhdGUpCisgICAg
ICAgICAgICBpbml0aWFsRGF0ZSA9IGdsb2JhbC5tYXhpbXVtRGF0ZTsKKyAgICAgICAgZ2xvYmFs
LmRheXNUYWJsZS5zZWxlY3REYXRlKGluaXRpYWxEYXRlKTsKKworICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpCisgICAg
ICAgICAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBtYWluLm9mZnNl
dEhlaWdodCArICJweCI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgd2luZG93
LnJlc2l6ZVRvKHdpbmRvdy5vdXRlcldpZHRoLCBtYWluLm9mZnNldFRvcCArIG1haW4ub2Zmc2V0
SGVpZ2h0KTsKKyAgICAgICAgfSwgMCk7CisgICAgfQorfQorCitmdW5jdGlvbiBjaGVja0xpbWl0
cygpIHsKKyAgICAvLyBIYXJkIGxpbWl0cyBvZiB0eXBlPWRhdGUuIFNlZSBXZWJDb3JlL3BsYXRm
b3JtL0RhdGVDb21wb25lbnRzLmguCisgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0gbmV3IERhdGUo
LTYyMTM1NTk2ODAwMDAwLjApOworICAgIGdsb2JhbC5tYXhpbXVtRGF0ZSA9IG5ldyBEYXRlKDg2
NDAwMDAwMDAwMDAwMDAuMCk7CisgICAgLy8gU2VlIFdlYkNvcmUvaHRtbC9EYXRlSW5wdXRUeXBl
LmNwcC4KKyAgICBnbG9iYWwuc3RlcCA9IDg2NDAwMDAwOworCisgICAgaWYgKGdsb2JhbC5wYXJh
bXMubWluKSB7CisgICAgICAgIC8vIFdlIGFzc3VtZSBwYXJhbXMubWluIGlzIGEgdmFsaWQgZGF0
ZS4KKyAgICAgICAgZ2xvYmFsLm1pbmltdW1EYXRlID0gcGFyc2VEYXRlU3RyaW5nKGdsb2JhbC5w
YXJhbXMubWluKTsKKyAgICB9CisgICAgaWYgKGdsb2JhbC5wYXJhbXMubWF4KSB7CisgICAgICAg
IC8vIFdlIGFzc3VtZSBwYXJhbXMubWF4IGlzIGEgdmFsaWQgZGF0ZS4KKyAgICAgICAgZ2xvYmFs
Lm1heGltdW1EYXRlID0gcGFyc2VEYXRlU3RyaW5nKGdsb2JhbC5wYXJhbXMubWF4KTsKKyAgICB9
CisgICAgaWYgKGdsb2JhbC5wYXJhbXMuc3RlcCkKKyAgICAgICAgZ2xvYmFsLnN0ZXAgKj0gZ2xv
YmFsLnBhcmFtcy5zdGVwOworfQorCitmdW5jdGlvbiBsYXlvdXQoKSB7CisgICAgdmFyIG1haW4g
PSAkKCJtYWluIik7CisgICAgdmFyIHBhcmFtcyA9IGdsb2JhbC5wYXJhbXM7CisgICAgbWFpbi5y
ZW1vdmVDaGlsZChtYWluLmZpcnN0Q2hpbGQpOworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRM
aXN0ZW5lcigia2V5ZG93biIsIGhhbmRsZUdsb2JhbEtleSwgZmFsc2UpOworCisgICAgZ2xvYmFs
LnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVhck1vbnRoQ29udHJvbGxlcigpOworICAgIGds
b2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmF0dGFjaFRvKG1haW4pOworICAgIGdsb2JhbC5kYXlz
VGFibGUgPSBuZXcgRGF5c1RhYmxlKCk7CisgICAgZ2xvYmFsLmRheXNUYWJsZS5hdHRhY2hUbyht
YWluKTsKKyAgICBsYXlvdXRCdXR0b25zKG1haW4pOworfQorCisvKioKKyAqIEBwYXJhbSB7RWxl
bWVudH0gbWFpbgorICovCitmdW5jdGlvbiBsYXlvdXRCdXR0b25zKG1haW4pIHsKKyAgICB2YXIg
Y29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJl
YSk7CisgICAgZ2xvYmFsLnRvZGF5ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVz
LlRvZGF5QnV0dG9uKTsKKyAgICBnbG9iYWwudG9kYXkudHlwZSA9ICJidXR0b24iOworICAgIGds
b2JhbC50b2RheS52YWx1ZSA9IGdsb2JhbC5wYXJhbXMudG9kYXlMYWJlbDsKKyAgICBnbG9iYWwu
dG9kYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVUb2RheSwgZmFsc2UpOworICAg
IGNvbnRhaW5lci5hcHBlbmRDaGlsZChnbG9iYWwudG9kYXkpOworICAgIGdsb2JhbC5jbGVhciA9
IG51bGw7CisgICAgaWYgKCFnbG9iYWwucGFyYW1zLnJlcXVpcmVkKSB7CisgICAgICAgIGdsb2Jh
bC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7
CisgICAgICAgIGdsb2JhbC5jbGVhci50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIGdsb2JhbC5j
bGVhci52YWx1ZSA9IGdsb2JhbC5wYXJhbXMuY2xlYXJMYWJlbDsKKyAgICAgICAgZ2xvYmFsLmNs
ZWFyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlQ2xlYXIsIGZhbHNlKTsKKyAgICAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdsb2JhbC5jbGVhcik7CisgICAgfQorICAgIG1haW4u
YXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKworICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJv
bCA9IGdsb2JhbC5jbGVhciB8fCBnbG9iYWwudG9kYXk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsK
KyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLl9jdXJy
ZW50WWVhciA9IC0xOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLwor
ICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IC0xOworfQorCisvKioKKyAqIEBwYXJhbSB7IUVsZW1l
bnR9IG1haW4KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBm
dW5jdGlvbihtYWluKSB7CisgICAgdmFyIG91dGVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgi
ZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhBcmVhKTsKKworICAgIHZhciBpbm5lckNvbnRhaW5l
ciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpOworICAg
IG91dGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGlubmVyQ29udGFpbmVyKTsKKworICAgIHRoaXMu
X2F0dGFjaExlZnRCdXR0b25zVG8oaW5uZXJDb250YWluZXIpOworCisgICAgdmFyIGJveCA9IGNy
ZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvckJveCk7CisgICAgaW5u
ZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTsKKyAgICAvLyBGSVhNRTogVGhlIHBvcHVwLW1l
bnUgZW11bGF0aW9uIGJ5IGEgbGlzdGJveCBpcyBub3QgZ3JlYXQuCisgICAgdGhpcy5fbW9udGhQ
b3B1cCA9IGNyZWF0ZUVsZW1lbnQoInNlbGVjdCIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBv
cHVwKTsKKyAgICB0aGlzLl9tb250aFBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGJp
bmQodGhpcy5faGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSwgZmFsc2UpOworICAgIGJveC5h
cHBlbmRDaGlsZCh0aGlzLl9tb250aFBvcHVwKTsKKyAgICB0aGlzLl9tb250aCA9IGNyZWF0ZUVs
ZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3Rvcik7CisgICAgdGhpcy5fbW9udGgu
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX3Nob3dQb3B1cCwgdGhpcyksIGZh
bHNlKTsKKyAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5fbW9udGgpOworCisgICAgdGhpcy5fYXR0
YWNoUmlnaHRCdXR0b25zVG8oaW5uZXJDb250YWluZXIpOworICAgIG1haW4uYXBwZW5kQ2hpbGQo
b3V0ZXJDb250YWluZXIpOworCisgICAgdGhpcy5fd2FsbCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIs
IENsYXNzTmFtZXMuTW9udGhTZWxlY3RvcldhbGwpOworICAgIHRoaXMuX3dhbGwuYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2Nsb3NlUG9wdXAsIHRoaXMpLCBmYWxzZSk7Cisg
ICAgbWFpbi5hcHBlbmRDaGlsZCh0aGlzLl93YWxsKTsKKworICAgIGdsb2JhbC5maXJzdEZvY3Vz
YWJsZUNvbnRyb2wgPSB0aGlzLl9sZWZ0MjsgLy8gRklYTUU6IFNob3VkIGl0IGJlIHRoaXMubW9u
dGg/Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJzQnV0dG9ucyA9IGZhbHNl
OworCisvKioKKyAqIEBwYXJhbSB7IUVsZW1lbnR9IHBhcmVudAorICovCitZZWFyTW9udGhDb250
cm9sbGVyLnByb3RvdHlwZS5fYXR0YWNoTGVmdEJ1dHRvbnNUbyA9IGZ1bmN0aW9uKHBhcmVudCkg
eworICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlll
YXJNb250aEJ1dHRvbkxlZnQpOworICAgIHBhcmVudC5hcHBlbmRDaGlsZChjb250YWluZXIpOwor
CisgICAgaWYgKFllYXJNb250aENvbnRyb2xsZXIuYWRkVGVuWWVhcnNCdXR0b25zKSB7CisgICAg
ICAgIHRoaXMuX2xlZnQzID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJN
b250aEJ1dHRvbik7CisgICAgICAgIHRoaXMuX2xlZnQzLnR5cGUgPSAiYnV0dG9uIjsKKyAgICAg
ICAgdGhpcy5fbGVmdDMudmFsdWUgPSAiPDw8IjsKKyAgICAgICAgdGhpcy5fbGVmdDMuYWRkRXZl
bnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwg
ZmFsc2UpOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fbGVmdDMpOworICAg
IH0KKworICAgIHRoaXMuX2xlZnQyID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVz
LlllYXJNb250aEJ1dHRvbik7CisgICAgdGhpcy5fbGVmdDIudHlwZSA9ICJidXR0b24iOworICAg
IHRoaXMuX2xlZnQyLnZhbHVlID0gIjw8IjsKKyAgICB0aGlzLl9sZWZ0Mi5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7
CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQyKTsKKworICAgIHRoaXMuX2xl
ZnQxID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7
CisgICAgdGhpcy5fbGVmdDEudHlwZSA9ICJidXR0b24iOworICAgIHRoaXMuX2xlZnQxLnZhbHVl
ID0gIjwiOworICAgIHRoaXMuX2xlZnQxLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0
aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAgICBjb250YWluZXIuYXBw
ZW5kQ2hpbGQodGhpcy5fbGVmdDEpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFFbGVtZW50fSBw
YXJlbnQKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2F0dGFjaFJpZ2h0QnV0
dG9uc1RvID0gZnVuY3Rpb24ocGFyZW50KSB7CisgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVs
ZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9uUmlnaHQpOworICAgIHBhcmVu
dC5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIHRoaXMuX3JpZ2h0MSA9IGNyZWF0ZUVsZW1l
bnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOworICAgIHRoaXMuX3JpZ2h0
MS50eXBlID0gImJ1dHRvbiI7CisgICAgdGhpcy5fcmlnaHQxLnZhbHVlID0gIj4iOworICAgIHRo
aXMuX3JpZ2h0MS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0
dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMu
X3JpZ2h0MSk7CisKKyAgICB0aGlzLl9yaWdodDIgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENs
YXNzTmFtZXMuWWVhck1vbnRoQnV0dG9uKTsKKyAgICB0aGlzLl9yaWdodDIudHlwZSA9ICJidXR0
b24iOworICAgIHRoaXMuX3JpZ2h0Mi52YWx1ZSA9ICI+PiI7CisgICAgdGhpcy5fcmlnaHQyLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhp
cyksIGZhbHNlKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmlnaHQyKTsKKwor
ICAgIGlmIChZZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJzQnV0dG9ucykgeworICAgICAg
ICB0aGlzLl9yaWdodDMgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1v
bnRoQnV0dG9uKTsKKyAgICAgICAgdGhpcy5fcmlnaHQzLnR5cGUgPSAiYnV0dG9uIjsKKyAgICAg
ICAgdGhpcy5fcmlnaHQzLnZhbHVlID0gIj4+PiI7CisgICAgICAgIHRoaXMuX3JpZ2h0My5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMp
LCBmYWxzZSk7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDMpOwor
ICAgIH0KK307CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworWWVhck1vbnRoQ29u
dHJvbGxlci5wcm90b3R5cGUueWVhciA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9j
dXJyZW50WWVhcjsKK307CisKKy8qKgorICogQHJldHVybiB7IW51bWJlcn0KKyAqLworWWVhck1v
bnRoQ29udHJvbGxlci5wcm90b3R5cGUubW9udGggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4g
dGhpcy5fY3VycmVudE1vbnRoOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIK
KyAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90
b3R5cGUuc2V0WWVhck1vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICB0aGlzLl9j
dXJyZW50WWVhciA9IHllYXI7CisgICAgdGhpcy5fY3VycmVudE1vbnRoID0gbW9udGg7CisgICAg
dGhpcy5fcmVkcmF3KCk7Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fcmVk
cmF3ID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRV
VENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAg
ICB2YXIgbWF4ID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGds
b2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgIHZhciBjdXJyZW50ID0gdGhpcy5f
Y3VycmVudFllYXIgKiAxMiArIHRoaXMuX2N1cnJlbnRNb250aDsKKyAgICBpZiAodGhpcy5fbGVm
dDMpCisgICAgICAgIHRoaXMuX2xlZnQzLmRpc2FibGVkID0gY3VycmVudCAtIDEzIDwgbWluOwor
ICAgIHRoaXMuX2xlZnQyLmRpc2FibGVkID0gY3VycmVudCAtIDIgPCBtaW47CisgICAgdGhpcy5f
bGVmdDEuZGlzYWJsZWQgPSBjdXJyZW50IC0gMSA8IG1pbjsKKyAgICB0aGlzLl9yaWdodDEuZGlz
YWJsZWQgPSBjdXJyZW50ICsgMSA+IG1heDsKKyAgICB0aGlzLl9yaWdodDIuZGlzYWJsZWQgPSBj
dXJyZW50ICsgMiA+IG1heDsKKyAgICBpZiAodGhpcy5fcmlnaHQzKQorICAgICAgICB0aGlzLl9y
aWdodDMuZGlzYWJsZWQgPSBjdXJyZW50ICsgMTMgPiBtYXg7CisgICAgdGhpcy5fbW9udGguaW5u
ZXJUZXh0ID0gZm9ybWF0WWVhck1vbnRoKHRoaXMuX2N1cnJlbnRZZWFyLCB0aGlzLl9jdXJyZW50
TW9udGgpOworICAgIHdoaWxlICh0aGlzLl9tb250aFBvcHVwLmhhc0NoaWxkTm9kZXMoKSkKKyAg
ICAgICAgdGhpcy5fbW9udGhQb3B1cC5yZW1vdmVDaGlsZCh0aGlzLl9tb250aFBvcHVwLmZpcnN0
Q2hpbGQpOworICAgIGZvciAodmFyIG0gPSBjdXJyZW50IC0gNjsgbSA8PSBjdXJyZW50ICsgNjsg
bSsrKSB7CisgICAgICAgIGlmIChtIDwgbWluIHx8IG0gPiBtYXgpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgdmFyIG9wdGlvbiA9IGNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIsIHVuZGVm
aW5lZCwgZm9ybWF0WWVhck1vbnRoKE1hdGguZmxvb3IobSAvIDEyKSwgbSAlIDEyKSk7CisgICAg
ICAgIG9wdGlvbi52YWx1ZSA9IFN0cmluZyhNYXRoLmZsb29yKG0gLyAxMikpICsgIi0iICsgU3Ry
aW5nKG0gJSAxMik7CisgICAgICAgIHRoaXMuX21vbnRoUG9wdXAuYXBwZW5kQ2hpbGQob3B0aW9u
KTsKKyAgICAgICAgaWYgKG0gPT0gY3VycmVudCkKKyAgICAgICAgICAgIG9wdGlvbi5zZWxlY3Rl
ZCA9IHRydWU7CisgICAgfQorfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3No
b3dQb3B1cCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX21vbnRoUG9wdXAuc2l6ZSA9IE1hdGgu
bWF4KDQsIE1hdGgubWluKDEwLCB0aGlzLl9tb250aFBvcHVwLmxlbmd0aCkpOworICAgIHRoaXMu
X21vbnRoUG9wdXAuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgdGhpcy5fbW9udGhQb3B1
cC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHls
ZS56SW5kZXggPSAiMTAwMCI7IC8vIExhcmdlciB0aGFuIHRoZSBkYXlzIGFyZWEuCisgICAgdGhp
cy5fbW9udGhQb3B1cC5zdHlsZS5sZWZ0ID0gdGhpcy5fbW9udGgub2Zmc2V0TGVmdCArICJweCI7
CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS50b3AgPSB0aGlzLl9tb250aC5vZmZzZXRUb3Ag
KyB0aGlzLl9tb250aC5vZmZzZXRIZWlnaHQgKyAicHgiOworICAgIHRoaXMuX21vbnRoUG9wdXAu
Zm9jdXMoKTsKKworICAgIHRoaXMuX3dhbGwuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAg
dGhpcy5fd2FsbC5zdHlsZS56SW5kZXggPSAiOTk5IjsgLy8gVGhpcyBzaG91bGQgYmUgc21hbGxl
ciB0aGFuIHRoZSB6LWluZGV4IG9mIG1vbnRoUG9wdXAuCit9OworCitZZWFyTW9udGhDb250cm9s
bGVyLnByb3RvdHlwZS5fY2xvc2VQb3B1cCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX21vbnRo
UG9wdXAuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICB0aGlzLl93YWxsLnN0eWxlLmRpc3Bs
YXkgPSAibm9uZSI7Cit9OworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxl
WWVhck1vbnRoQ2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgdGhpcy5fY2xvc2VQb3B1cCgpOwor
CisgICAgdmFyIHJlc3VsdCA9IHRoaXMuX21vbnRoUG9wdXAudmFsdWUubWF0Y2goLyhcZCspLShc
ZCspLyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgbmV3WWVh
ciA9IE51bWJlcihyZXN1bHRbMV0pOworICAgIHZhciBuZXdNb250aCA9IE51bWJlcihyZXN1bHRb
Ml0pOworICAgIGdsb2JhbC5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlv
blBvc2l0aW9uKG5ld1llYXIsIG5ld01vbnRoKTsKK307CisKKy8qCisgKiBAY29uc3QKKyAqIEB0
eXBlIHtudW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNUZW5ZZWFycyA9
IC0xMjA7CisvKgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICovCitZZWFyTW9udGhD
b250cm9sbGVyLlByZXZpb3VzWWVhciA9IC0xMjsKKy8qCisgKiBAY29uc3QKKyAqIEB0eXBlIHtu
dW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNNb250aCA9IC0xOworLyoK
KyAqIEBjb25zdAorICogQHR5cGUge251bWJlcn0KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5O
ZXh0TW9udGggPSAxOworLyoKKyAqIEBjb25zdAorICogQHR5cGUge251bWJlcn0KKyAqLworWWVh
ck1vbnRoQ29udHJvbGxlci5OZXh0WWVhciA9IDEyOworLyoKKyAqIEBjb25zdAorICogQHR5cGUg
e251bWJlcn0KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5OZXh0VGVuWWVhcnMgPSAxMjA7CisK
Ky8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5w
cm90b3R5cGUuX2hhbmRsZUJ1dHRvbkNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAo
ZXZlbnQudGFyZ2V0ID09IHRoaXMuX2xlZnQzKQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5
KFllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNUZW5ZZWFycyk7CisgICAgZWxzZSBpZiAoZXZl
bnQudGFyZ2V0ID09IHRoaXMuX2xlZnQyKQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFll
YXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNZZWFyKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJn
ZXQgPT0gdGhpcy5fbGVmdDEpCisgICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRo
Q29udHJvbGxlci5QcmV2aW91c01vbnRoKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0g
dGhpcy5fcmlnaHQxKQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRy
b2xsZXIuTmV4dE1vbnRoKQorICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9yaWdo
dDIpCisgICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5OZXh0
WWVhcik7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuX3JpZ2h0MykKKyAgICAg
ICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm47Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJl
cn0gYW1vdW50CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLm1vdmVSZWxhdGl2
ZWx5ID0gZnVuY3Rpb24oYW1vdW50KSB7CisgICAgdmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0
ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgo
KTsKKyAgICB2YXIgbWF4ID0gZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAx
MiArIGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgIHZhciBjdXJyZW50ID0g
dGhpcy5fY3VycmVudFllYXIgKiAxMiArIHRoaXMuX2N1cnJlbnRNb250aDsKKyAgICB2YXIgdXBk
YXRlZCA9IGN1cnJlbnQ7CisgICAgaWYgKGFtb3VudCA8IDApCisgICAgICAgIHVwZGF0ZWQgPSBj
dXJyZW50ICsgYW1vdW50ID49IG1pbiA/IGN1cnJlbnQgKyBhbW91bnQgOiBtaW47CisgICAgZWxz
ZQorICAgICAgICB1cGRhdGVkID0gY3VycmVudCArIGFtb3VudCA8PSBtYXggPyBjdXJyZW50ICsg
YW1vdW50IDogbWF4OworICAgIGlmICh1cGRhdGVkID09IGN1cnJlbnQpCisgICAgICAgIHJldHVy
bjsKKyAgICBnbG9iYWwuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtlZXBTZWxlY3Rpb25Q
b3NpdGlvbihNYXRoLmZsb29yKHVwZGF0ZWQgLyAxMiksIHVwZGF0ZWQgJSAxMik7Cit9OworCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKy8qKgorICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIERheXNUYWJs
ZSgpIHsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8KKyAgICB0aGlz
Ll94ID0gLTE7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFudW1iZXJ9CisgICAgICovCisgICAg
dGhpcy5feSA9IC0xOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLwor
ICAgIHRoaXMuX2N1cnJlbnRZZWFyID0gLTE7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFudW1i
ZXJ9CisgICAgICovCisgICAgdGhpcy5fY3VycmVudE1vbnRoID0gLTE7Cit9CisKKy8qKgorICog
QHJldHVybiB7IWJvb2xlYW59CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX2hhc1NlbGVjdGlv
biA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl94ID49IDAgJiYgdGhpcy5feSA+PSAw
OworfQorCisvKioKKyAqIFRoZSBudW1iZXIgb2Ygd2VlayBsaW5lcyBpbiB0aGUgc2NyZWVuLgor
ICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICovCitEYXlzVGFibGUuX1dlZWtzID0gNjsK
KworLyoqCisgKiBAcGFyYW0geyFFbGVtZW50fSBtYWluCisgKi8KK0RheXNUYWJsZS5wcm90b3R5
cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CisgICAgdGhpcy5fZGF5c0NvbnRhaW5lciA9
IGNyZWF0ZUVsZW1lbnQoInRhYmxlIiwgQ2xhc3NOYW1lcy5EYXlzQXJlYSk7CisgICAgdGhpcy5f
ZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxl
RGF5Q2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVu
dExpc3RlbmVyKCJtb3VzZW92ZXIiLCBiaW5kKHRoaXMuX2hhbmRsZU1vdXNlT3ZlciwgdGhpcyks
IGZhbHNlKTsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
b3V0IiwgYmluZCh0aGlzLl9oYW5kbGVNb3VzZU91dCwgdGhpcyksIGZhbHNlKTsKKyAgICB0aGlz
Ll9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIndlYmtpdFRyYW5zaXRpb25FbmQiLCBi
aW5kKHRoaXMuX21vdmVJbkRheXMsIHRoaXMpLCBmYWxzZSk7CisgICAgdmFyIGNvbnRhaW5lciA9
IGNyZWF0ZUVsZW1lbnQoInRyIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbENvbnRhaW5lcik7CisgICAg
dmFyIHdlZWtTdGFydERheSA9IGdsb2JhbC5wYXJhbXMud2Vla1N0YXJ0RGF5IHx8IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspCisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGls
ZChjcmVhdGVFbGVtZW50KCJ0aCIsIENsYXNzTmFtZXMuRGF5TGFiZWwsIGdsb2JhbC5wYXJhbXMu
ZGF5TGFiZWxzWyh3ZWVrU3RhcnREYXkgKyBpKSAlIDddKSk7CisgICAgdGhpcy5fZGF5c0NvbnRh
aW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpOworICAgIHRoaXMuX2RheXMgPSBbXTsKKyAgICBm
b3IgKHZhciB3ID0gMDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgeworICAgICAgICBjb250
YWluZXIgPSBjcmVhdGVFbGVtZW50KCJ0ciIsIENsYXNzTmFtZXMuV2Vla0NvbnRhaW5lcik7Cisg
ICAgICAgIHZhciB3ZWVrID0gW107CisgICAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgNzsgZCsr
KSB7CisgICAgICAgICAgICB2YXIgZGF5ID0gY3JlYXRlRWxlbWVudCgidGQiLCBDbGFzc05hbWVz
LkRheSwgIiAiKTsKKyAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoImRhdGEtcG9zaXRpb24t
eCIsIFN0cmluZyhkKSk7CisgICAgICAgICAgICBkYXkuc2V0QXR0cmlidXRlKCJkYXRhLXBvc2l0
aW9uLXkiLCBTdHJpbmcodykpOworICAgICAgICAgICAgd2Vlay5wdXNoKGRheSk7CisgICAgICAg
ICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5KTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9kYXlzLnB1c2god2Vlayk7CisgICAgICAgIHRoaXMuX2RheXNDb250YWluZXIuYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKKyAgICB9CisgICAgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2
IiwgQ2xhc3NOYW1lcy5EYXlzQXJlYUNvbnRhaW5lcik7CisgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKHRoaXMuX2RheXNDb250YWluZXIpOworICAgIGNvbnRhaW5lci50YWJJbmRleCA9IDA7Cisg
ICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBiaW5kKHRoaXMuX2hhbmRs
ZUtleSwgdGhpcyksIGZhbHNlKTsKKyAgICBtYWluLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisK
KyAgICBjb250YWluZXIuZm9jdXMoKTsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB0
aW1lIGRhdGUgaW4gbWlsbGlzZWNvbmQuCisgKiBAcmV0dXJuIHshYm9vbGVhbn0KKyAqLworZnVu
Y3Rpb24gc3RlcE1pc21hdGNoKHRpbWUpIHsKKyAgICByZXR1cm4gKHRpbWUgLSBnbG9iYWwubWlu
aW11bURhdGUuZ2V0VGltZSgpKSAlIGdsb2JhbC5zdGVwICE9IDA7Cit9CisKKy8qKgorICogQHBh
cmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWlsbGlzZWNvbmQuCisgKiBAcmV0dXJuIHshYm9v
bGVhbn0KKyAqLworZnVuY3Rpb24gb3V0T2ZSYW5nZSh0aW1lKSB7CisgICAgcmV0dXJuIHRpbWUg
PCBnbG9iYWwubWluaW11bURhdGUuZ2V0VGltZSgpIHx8IHRpbWUgPiBnbG9iYWwubWF4aW11bURh
dGUuZ2V0VGltZSgpOworfQorCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gdGltZSBkYXRlIGlu
IG1pbGxpc2Vjb25kLgorICogQHJldHVybiB7IWJvb2xlYW59CisgKi8KK2Z1bmN0aW9uIGlzVmFs
aWREYXRlKHRpbWUpIHsKKyAgICByZXR1cm4gIW91dE9mUmFuZ2UodGltZSkgJiYgIXN0ZXBNaXNt
YXRjaCh0aW1lKTsKK30KKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBwYXJh
bSB7IW51bWJlcn0gbW9udGgKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5fcmVuZGVyTW9udGgg
PSBmdW5jdGlvbih5ZWFyLCBtb250aCkgeworICAgIHRoaXMuX2N1cnJlbnRZZWFyID0geWVhcjsK
KyAgICB0aGlzLl9jdXJyZW50TW9udGggPSBtb250aDsKKyAgICB2YXIgZGF5SXRlcmF0b3IgPSBu
ZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSkpOworICAgIGRheUl0ZXJhdG9yLnNldFVU
Q0Z1bGxZZWFyKHllYXIpOworICAgIHZhciBtb250aFN0YXJ0RGF5ID0gZGF5SXRlcmF0b3IuZ2V0
VVRDRGF5KCk7CisgICAgdmFyIHdlZWtTdGFydERheSA9IGdsb2JhbC5wYXJhbXMud2Vla1N0YXJ0
RGF5IHx8IDA7CisgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gd2Vla1N0YXJ0RGF5IC0gbW9udGhTdGFy
dERheTsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPj0gMCkKKyAgICAgICAgc3RhcnRPZmZzZXQgLT0g
NzsKKyAgICBkYXlJdGVyYXRvci5zZXRVVENEYXRlKHN0YXJ0T2Zmc2V0ICsgMSk7CisgICAgZm9y
ICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKKyAgICAgICAgZm9yICh2
YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIHZhciBpdGVyWWVhciA9IGRheUl0
ZXJhdG9yLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgICAgICAgICB2YXIgaXRlck1vbnRoID0gZGF5
SXRlcmF0b3IuZ2V0VVRDTW9udGgoKTsKKyAgICAgICAgICAgIHZhciB0aW1lID0gZGF5SXRlcmF0
b3IuZ2V0VGltZSgpOworICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9kYXlzW3ddW2Rd
OworICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgbG9jYWxpemVkIG51bWJlcj8KKyAgICAgICAg
ICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gU3RyaW5nKGRheUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSk7
CisgICAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IENsYXNzTmFtZXMuRGF5OworICAgICAg
ICAgICAgZWxlbWVudC5kYXRhc2V0LnN1Ym1pdFZhbHVlID0gc2VyaWFsaXplRGF0ZShpdGVyWWVh
ciwgaXRlck1vbnRoLCBkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOworICAgICAgICAgICAgaWYg
KG91dE9mUmFuZ2UodGltZSkpCisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRk
KENsYXNzTmFtZXMuVW5hdmFpbGFibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoc3RlcE1pc21h
dGNoKHRpbWUpKQorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05h
bWVzLlVuYXZhaWxhYmxlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKChpdGVyWWVhciA9PSB5ZWFy
ICYmIGRheUl0ZXJhdG9yLmdldFVUQ01vbnRoKCkgPCBtb250aCkgfHwgKG1vbnRoID09IDAgJiYg
aXRlck1vbnRoID09IDExKSkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFk
ZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xp
c3QuYWRkKENsYXNzTmFtZXMuTm90VGhpc01vbnRoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
KGl0ZXJZZWFyID09IHllYXIgJiYgZGF5SXRlcmF0b3IuZ2V0VVRDTW9udGgoKSA+IG1vbnRoKSB8
fCAobW9udGggPT0gMTEgJiYgaXRlck1vbnRoID09IDApKSB7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5Ob3RUaGlzTW9udGgpOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChpc05hTih0aW1lKSkgeworICAgICAgICAgICAgICAgIGVsZW1lbnQu
aW5uZXJUZXh0ID0gIi0iOworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChD
bGFzc05hbWVzLlVuYXZhaWxhYmxlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7CisgICAgICAg
ICAgICBkYXlJdGVyYXRvci5zZXRVVENEYXRlKGRheUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSArIDEp
OworICAgICAgICB9CisgICAgfQorCisgICAgZ2xvYmFsLnRvZGF5LmRpc2FibGVkID0gIWlzVmFs
aWREYXRlKHBhcnNlRGF0ZVN0cmluZygpLmdldFRpbWUoKSk7Cit9OworCisvKioKKyAqIEBwYXJh
bSB7IW51bWJlcn0geWVhcgorICogQHBhcmFtIHshbnVtYmVyfSBtb250aAorICovCitEYXlzVGFi
bGUucHJvdG90eXBlLl9uYXZpZ2F0ZVRvTW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgewor
ICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLnNldFllYXJNb250aCh5ZWFyLCBtb250aCk7
CisgICAgdGhpcy5fcmVuZGVyTW9udGgoeWVhciwgbW9udGgpOworfTsKKworLyoqCisgKiBAcGFy
YW0geyFudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgKKyAqLworRGF5c1Rh
YmxlLnByb3RvdHlwZS5fbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbiA9IGZ1bmN0aW9uKHll
YXIsIG1vbnRoKSB7CisgICAgaWYgKHRoaXMuX2N1cnJlbnRZZWFyID49IDAgJiYgdGhpcy5fY3Vy
cmVudE1vbnRoID49IDApIHsKKyAgICAgICAgaWYgKHllYXIgPT0gdGhpcy5fY3VycmVudFllYXIg
JiYgbW9udGggPT0gdGhpcy5fY3VycmVudE1vbnRoKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB2YXIgZGVjcmVhc2luZyA9IGZhbHNlOworICAgICAgICBpZiAoeWVhciA8IHRoaXMuX2N1
cnJlbnRZZWFyKQorICAgICAgICAgICAgZGVjcmVhc2luZyA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKHllYXIgPiB0aGlzLl9jdXJyZW50WWVhcikKKyAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBm
YWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVjcmVhc2luZyA9IG1vbnRoIDwgdGhp
cy5fY3VycmVudE1vbnRoOworICAgICAgICB2YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRh
aW5lci5zdHlsZTsKKyAgICAgICAgZGF5c1N0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKKyAg
ICAgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAibGVmdCAwLjFzIGVhc2UiOworICAg
ICAgICBkYXlzU3R5bGUubGVmdCA9IChkZWNyZWFzaW5nID8gIiIgOiAiLSIpICsgdGhpcy5fZGF5
c0NvbnRhaW5lci5vZmZzZXRXaWR0aCArICJweCI7CisgICAgfQorICAgIHRoaXMuX25hdmlnYXRl
VG9Nb250aCh5ZWFyLCBtb250aCk7Cit9OworCitEYXlzVGFibGUucHJvdG90eXBlLl9tb3ZlSW5E
YXlzID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIGRheXNTdHlsZSA9IHRoaXMuX2RheXNDb250YWlu
ZXIuc3R5bGU7CisgICAgaWYgKGRheXNTdHlsZS5sZWZ0ID09ICIwcHgiKQorICAgICAgICByZXR1
cm47CisgICAgZGF5c1N0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAiIjsKKyAgICBkYXlzU3R5bGUu
bGVmdCA9IChkYXlzU3R5bGUubGVmdC5jaGFyQXQoMCkgPT0gIi0iID8gIiIgOiAiLSIpICsgdGhp
cy5fZGF5c0NvbnRhaW5lci5vZmZzZXRXaWR0aCArICJweCI7CisgICAgdGhpcy5fZGF5c0NvbnRh
aW5lci5vZmZzZXRMZWZ0OyAvLyBGb3JjZSB0byBsYXlvdXQuCisgICAgZGF5c1N0eWxlLndlYmtp
dFRyYW5zaXRpb24gPSAibGVmdCAwLjFzIGVhc2UiOworICAgIGRheXNTdHlsZS5sZWZ0ID0gIjBw
eCI7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgorICogQHBhcmFtIHshbnVt
YmVyfSBtb250aAorICovCitEYXlzVGFibGUucHJvdG90eXBlLm5hdmlnYXRlVG9Nb250aEFuZEtl
ZXBTZWxlY3Rpb25Qb3NpdGlvbiA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgaWYgKHll
YXIgPT0gdGhpcy5fY3VycmVudFllYXIgJiYgbW9udGggPT0gdGhpcy5fY3VycmVudE1vbnRoKQor
ICAgICAgICByZXR1cm47CisgICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbih5
ZWFyLCBtb250aCk7CisgICAgaWYgKHRoaXMuX2hhc1NlbGVjdGlvbigpKQorICAgICAgICB0aGlz
Ll9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3Rl
ZCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IURhdGV9IGRhdGUKKyAqLworRGF5c1RhYmxlLnBy
b3RvdHlwZS5zZWxlY3REYXRlID0gZnVuY3Rpb24oZGF0ZSkgeworICAgIHRoaXMuX25hdmlnYXRl
VG9Nb250aFdpdGhBbmltYXRpb24oZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01v
bnRoKCkpOworICAgIHZhciBkYXRlU3RyaW5nID0gc2VyaWFsaXplRGF0ZShkYXRlLmdldFVUQ0Z1
bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCkpOworICAgIGZv
ciAodmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAgICAgIGZvciAo
dmFyIGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fZGF5c1t3XVtk
XS5kYXRhc2V0LnN1Ym1pdFZhbHVlID09IGRhdGVTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9kYXlzW3ddW2RdLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5feCA9IGQ7CisgICAgICAgICAgICAgICAgdGhpcy5feSA9IHc7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
OworCisvKioKKyAqIEByZXR1cm4geyFib29sZWFufQorICovCitEYXlzVGFibGUucHJvdG90eXBl
Ll9tYXliZVNldFByZXZpb3VzTW9udGggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgeWVhciA9IGds
b2JhbC55ZWFyTW9udGhDb250cm9sbGVyLnllYXIoKTsKKyAgICB2YXIgbW9udGggPSBnbG9iYWwu
eWVhck1vbnRoQ29udHJvbGxlci5tb250aCgpOworICAgIHZhciB0aGlzTW9udGhTdGFydFRpbWUg
PSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSk7CisgICAgaWYgKGdsb2JhbC5taW5pbXVtRGF0ZS5n
ZXRUaW1lKCkgPj0gdGhpc01vbnRoU3RhcnRUaW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1vbnRoID09IDApIHsKKyAgICAgICAgeWVhci0tOworICAgICAgICBtb250aCA9IDEx
OworICAgIH0gZWxzZQorICAgICAgICBtb250aC0tOworICAgIHRoaXMuX25hdmlnYXRlVG9Nb250
aFdpdGhBbmltYXRpb24oeWVhciwgbW9udGgpOworICAgIHJldHVybiB0cnVlOworfTsKKworLyoq
CisgKiBAcmV0dXJuIHshYm9vbGVhbn0KKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5fbWF5YmVT
ZXROZXh0TW9udGggPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgeWVhciA9IGdsb2JhbC55ZWFyTW9u
dGhDb250cm9sbGVyLnllYXIoKTsKKyAgICB2YXIgbW9udGggPSBnbG9iYWwueWVhck1vbnRoQ29u
dHJvbGxlci5tb250aCgpOworICAgIGlmIChtb250aCA9PSAxMSkgeworICAgICAgICB5ZWFyKys7
CisgICAgICAgIG1vbnRoID0gMDsKKyAgICB9IGVsc2UKKyAgICAgICAgbW9udGgrKzsKKyAgICB2
YXIgbmV4dE1vbnRoU3RhcnRUaW1lID0gRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpOworICAgIGlm
IChnbG9iYWwubWF4aW11bURhdGUuZ2V0VGltZSgpIDwgbmV4dE1vbnRoU3RhcnRUaW1lKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlv
bih5ZWFyLCBtb250aCk7CisgICAgcmV0dXJuIHRydWU7Cit9OworCisvKioKKyAqIEBwYXJhbSB7
RXZlbnR9IGV2ZW50CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZURheUNsaWNrID0g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlu
cyhDbGFzc05hbWVzLkF2YWlsYWJsZSkpCisgICAgICAgIHN1Ym1pdFZhbHVlKGV2ZW50LnRhcmdl
dC5kYXRhc2V0LnN1Ym1pdFZhbHVlKTsKK307CisKKy8qKgorICogQHBhcmFtIHtFdmVudH0gZXZl
bnQKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdmVyID0gZnVuY3Rpb24o
ZXZlbnQpIHsKKyAgICB2YXIgbm9kZSA9IGV2ZW50LnRhcmdldDsKKyAgICBpZiAodGhpcy5faGFz
U2VsZWN0aW9uKCkpCisgICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NM
aXN0LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsKKyAgICBpZiAoIW5vZGUuY2xhc3NMaXN0
LmNvbnRhaW5zKENsYXNzTmFtZXMuRGF5KSkgeworICAgICAgICB0aGlzLl94ID0gLTE7CisgICAg
ICAgIHRoaXMuX3kgPSAtMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBub2RlLmNsYXNz
TGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgdGhpcy5feCA9IE51bWJlcihub2Rl
LmRhdGFzZXQucG9zaXRpb25YKTsKKyAgICB0aGlzLl95ID0gTnVtYmVyKG5vZGUuZGF0YXNldC5w
b3NpdGlvblkpOworfTsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitEYXlz
VGFibGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZU91dCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAg
aWYgKHRoaXMuX2hhc1NlbGVjdGlvbigpKQorICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ldW3Ro
aXMuX3hdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgdGhpcy5f
eCA9IC0xOworICAgIHRoaXMuX3kgPSAtMTsKK307CisKKy8qKgorICogQHBhcmFtIHtFdmVudH0g
ZXZlbnQKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlS2V5ID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICB2YXIgeCA9IHRoaXMuX3g7
CisgICAgdmFyIHkgPSB0aGlzLl95OworICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVy
OworICAgIGlmICghdGhpcy5faGFzU2VsZWN0aW9uKCkgJiYgKGtleSA9PSAiTGVmdCIgfHwga2V5
ID09ICJVcCIgfHwga2V5ID09ICJSaWdodCIgfHwga2V5ID09ICJEb3duIikpIHsKKyAgICAgICAg
Ly8gUHV0IHRoZSBzZWxlY3Rpb24gb24gYSBjZW50ZXIgY2VsbC4KKyAgICAgICAgdGhpcy51cGRh
dGVTZWxlY3Rpb24oZXZlbnQsIDMsIE1hdGguZmxvb3IoRGF5c1RhYmxlLl9XZWVrcyAvIDIgLSAx
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoa2V5ID09ICJMZWZ0Iikgewor
ICAgICAgICBpZiAoeCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHkgPSBEYXlzVGFibGUuX1dlZWtzIC0g
MTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHktLTsKKyAgICAgICAgICAg
IHggPSA2OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHgtLTsKKyAgICAgICAgdGhpcy51
cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlVw
IikgeworICAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJl
U2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHkgPSBEYXlzVGFibGUuX1dlZWtzIC0gMTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB5
LS07CisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKworICAgIH0g
ZWxzZSBpZiAoa2V5ID09ICJSaWdodCIpIHsKKyAgICAgICAgaWYgKHggPT0gNikgeworICAgICAg
ICAgICAgaWYgKHkgPT0gRGF5c1RhYmxlLl9XZWVrcyAtIDEpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHkrKzsKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHgrKzsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworCisg
ICAgfSBlbHNlIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAgICAgIGlmICh5ID09IERheXNUYWJs
ZS5fV2Vla3MgLSAxKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRo
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgeSA9IDA7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgeSsrOworICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihl
dmVudCwgeCwgeSk7CisKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgeworICAgICAg
ICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAiUGFnZURvd24iKSB7CisgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXRO
ZXh0TW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxl
Y3Rpb24oZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24o
KSAmJiBrZXkgPT0gIkVudGVyIikgeworICAgICAgICB2YXIgZGF5Tm9kZSA9IHRoaXMuX2RheXNb
eV1beF07CisgICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVz
LkF2YWlsYWJsZSkpIHsKKyAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5z
dWJtaXRWYWx1ZSk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgfQorCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIpIHsgLy8gJ3QnCisgICAgICAg
IHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVz
LlNlbGVjdGVkKTsKKyAgICAgICAgdGhpcy5zZWxlY3REYXRlKG5ldyBEYXRlKCkpOworICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKiBAcGFyYW0g
eyFudW1iZXJ9IHgKKyAqIEBwYXJhbSB7IW51bWJlcn0geQorICovCitEYXlzVGFibGUucHJvdG90
eXBlLnVwZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCB4LCB5KSB7CisgICAgaWYgKHRo
aXMuX2hhc1NlbGVjdGlvbigpKQorICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ldW3RoaXMuX3hd
LmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgaWYgKHggPj0gMCAm
JiB5ID49IDApIHsKKyAgICAgICAgdGhpcy5fZGF5c1t5XVt4XS5jbGFzc0xpc3QuYWRkKENsYXNz
TmFtZXMuU2VsZWN0ZWQpOworICAgICAgICB0aGlzLl94ID0geDsKKyAgICAgICAgdGhpcy5feSA9
IHk7CisgICAgfQorICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGhhbmRsZVRvZGF5KCkg
eworICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICBnbG9iYWwuZGF5c1RhYmxlLnNlbGVj
dERhdGUoZGF0ZSk7CisgICAgc3VibWl0VmFsdWUoc2VyaWFsaXplRGF0ZShkYXRlLmdldEZ1bGxZ
ZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTsKK30KKworZnVuY3Rpb24g
aGFuZGxlQ2xlYXIoKSB7CisgICAgc3VibWl0VmFsdWUoIiIpOworfQorCisvKioKKyAqIEBwYXJh
bSB7c3RyaW5nfSB2YWx1ZQorICovCitmdW5jdGlvbiBzdWJtaXRWYWx1ZSh2YWx1ZSkgeworICAg
IHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoMCwgdmFsdWUpOworfQorCitmdW5jdGlvbiBo
YW5kbGVDYW5jZWwoKSB7CisgICAgd2luZG93LnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgtMSwgIiIp
OworfQorCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRs
ZUdsb2JhbEtleShldmVudCkgeworICAgIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpOworICAgIHZh
ciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOworICAgIGlmIChrZXkgPT0gIlUrMDAwOSIpIHsK
KyAgICAgICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09
IGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbCkgeworICAgICAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAg
ICAgICAgZ2xvYmFsLmZpcnN0Rm9jdXNhYmxlQ29udHJvbC5mb2N1cygpOworICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZ2xvYmFs
LmZpcnN0Rm9jdXNhYmxlQ29udHJvbCkgeworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7CisgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAg
Z2xvYmFsLmxhc3RGb2N1c2FibGVDb250cm9sLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAiVSswMDREIikgeyAvLyAnbScKKyAgICAgICAgZ2xvYmFsLnllYXJNb250
aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZZWFyTW9udGhDb250
cm9sbGVyLlByZXZpb3VzTW9udGggOiBZZWFyTW9udGhDb250cm9sbGVyLk5leHRNb250aCk7Cisg
ICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1OSIpIHsgLy8gJ3knCisgICAgICAgIGdsb2JhbC55
ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1v
bnRoQ29udHJvbGxlci5QcmV2aW91c1llYXIgOiBZZWFyTW9udGhDb250cm9sbGVyLk5leHRZZWFy
KTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiVSswMDQ0IikgeyAvLyAnZCcKKyAgICAgICAgZ2xv
YmFsLnllYXJNb250aENvbnRyb2xsZXIubW92ZVJlbGF0aXZlbHkoZXZlbnQuc2hpZnRLZXkgPyBZ
ZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzVGVuWWVhcnMgOiBZZWFyTW9udGhDb250cm9sbGVy
Lk5leHRUZW5ZZWFycyk7CisgICAgfQorfQorCitmdW5jdGlvbiBtYXliZVVwZGF0ZUZvY3VzU3R5
bGUoKSB7CisgICAgaWYgKGdsb2JhbC5oYWRLZXlFdmVudCkKKyAgICAgICAgcmV0dXJuOworICAg
IGdsb2JhbC5oYWRLZXlFdmVudCA9IHRydWU7CisgICAgJCgibWFpbiIpLmNsYXNzTGlzdC5yZW1v
dmUoQ2xhc3NOYW1lcy5Ob0ZvY3VzUmluZyk7Cit9CisKK2lmICh3aW5kb3cuZGlhbG9nQXJndW1l
bnRzKSB7CisgICAgaW5pdGlhbGl6ZShkaWFsb2dBcmd1bWVudHMpOworfSBlbHNlIHsKKyAgICB3
aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGhhbmRsZU1lc3NhZ2UsIGZhbHNlKTsK
KyAgICB3aW5kb3cuc2V0VGltZW91dChoYW5kbGVBcmd1bWVudHNUaW1lb3V0LCAxMDAwKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggYzFkOTc1Nzc2NGE0ZGIw
YzMyYmY1YWNlMDRjZjgxNjBmYWJlYTE0MC4uNGRjMTkwOTJmYTBmYmM0ZTE0Nzc1NzQ1MmEzMTll
YzAyYzY0YzVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTg0
MSw2ICs4NDEsMjUgQEAKICAgICAgICAgICBdLAogICAgICAgICB9LAogICAgICAgICB7CisgICAg
ICAgICAgJ2FjdGlvbl9uYW1lJzogJ0NhbGVuZGFyUGlja2VyJywKKyAgICAgICAgICAnaW5wdXRz
JzogWworICAgICAgICAgICAgJy4uL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MnLAorICAg
ICAgICAgICAgJy4uL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcycsCisgICAgICAgICAgXSwK
KyAgICAgICAgICAnb3V0cHV0cyc6IFsKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElB
VEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNrZXIuaCcsCisgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmNwcCcsCisgICAgICAgICAg
XSwKKyAgICAgICAgICAnYWN0aW9uJzogWworICAgICAgICAgICAgJ3B5dGhvbicsCisgICAgICAg
ICAgICAnLi4vbWFrZS1maWxlLWFycmF5cy5weScsCisgICAgICAgICAgICAnLS1jb25kaXRpb249
RU5BQkxFKENBTEVOREFSX1BJQ0tFUiknLAorICAgICAgICAgICAgJy0tb3V0LWg9PChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmgnLAorICAgICAgICAgICAg
Jy0tb3V0LWNwcD08KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNr
ZXIuY3BwJywKKyAgICAgICAgICAgICc8QChfaW5wdXRzKScsCisgICAgICAgICAgXSwKKyAgICAg
ICAgfSwKKyAgICAgICAgewogICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdYTGlua05hbWVzJywK
ICAgICAgICAgICAnaW5wdXRzJzogWwogICAgICAgICAgICAgJy4uL2RvbS9tYWtlX25hbWVzLnBs
JywKQEAgLTEwNzcsNiArMTA5Niw3IEBACiAgICAgICAgICMgQWRkaXRpb25hbCAuY3BwIGZpbGVz
IGZyb20gd2ViY29yZV9iaW5kaW5nc19zb3VyY2VzIGFjdGlvbnMuCiAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCcsCiAgICAg
ICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSFRNTE5hbWVzLmNwcCcsCisg
ICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNrZXIu
Y3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9FdmVudEZh
Y3RvcnkuY3BwJywKICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9F
dmVudEhlYWRlcnMuaCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvRXZlbnRJbnRlcmZhY2VzLmgnLApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDFkMWRlMmIyZDg2NWViMGJlNGIxMTFiZmE1NDIwZWY3MzVkZDY2OGUuLjgyODBhNWY2
ZTk0N2IxOGY4MzYyOTBmNDdjN2IyNWNiMDExYjI1OWQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZwor
KysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNC0wNCAgS2VudCBUYW11cmEg
IDx0a2VudEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIEphdmFTY3JpcHQgYW5kIENTUyBj
b2RlIGZvciB0aGUgY2FsZW5kYXIgcGlja2VyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzAxMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWFudWFsVGVzdHMvZm9ybXMvY2Fs
ZW5kYXItcGlja2VyLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA0LTAzICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgcmVtb3ZlIFdlYktpdCBmaWxlcyBmcm9tIC5naXRh
dHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIu
aHRtbCBiL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE0MjVlODg5NmQyMDJmNWMyODExN2ExZGE4NzAzMDg1OGFiM2E5YjQKLS0tIC9kZXYvbnVsbAor
KysgYi9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbApAQCAtMCwwICsxLDgy
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PXV0Zi04
PgorPHRpdGxlPkNhbGVuZGFyIFBpY2tlciB0ZXN0PC90aXRsZT4KKzxzdHlsZT4KK2JvZHkgewor
ICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWZmZmY7Cit9CitpZnJhbWUgeworICAgIHotaW5kZXg6
IDIxNDc0ODM2NDc7CisgICAgd2lkdGg6IDI5MHB4OworICAgIGhlaWdodDogMjU2cHg7CisgICAg
Ym9yZGVyOiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9Cis8L3N0eWxlPgorPC9oZWFkPgor
PGJvZHk+CisKKzxwPlRoaXMgaXMgYSB0ZXN0YmVkIGZvciBhIGNhbGVuZGFyIHBpY2tlci48L3A+
CisKKzxkaXY+PGlucHV0IHR5cGU9InRleHQiIGlkPSJkYXRlIj48L2Rpdj4KKzxpZnJhbWU+PC9p
ZnJhbWU+CisKKzxvbCBpZD0iY29uc29sZSIgc3R5bGU9ImZvbnQtZmFtaWx5Om1vbm9zcGFjZTsi
PgorPC9vbD4KKworPHNjcmlwdD4KK3ZhciBmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCdpZnJhbWUnKVswXTsKK3ZhciBkb2MgPSBmcmFtZS5jb250ZW50RG9jdW1lbnQ7Citk
b2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9ICc8aGVhZD48L2hlYWQ+PGJvZHk+PGRpdiBp
ZD1tYWluPkxvYWRpbmcuLi48L2Rpdj48L2JvZHk+JzsKK3ZhciBsaW5rID0gZG9jLmNyZWF0ZUVs
ZW1lbnQoJ2xpbmsnKTsKK2xpbmsucmVsID0gJ3N0eWxlc2hlZXQnOworbGluay5ocmVmID0gJy4u
Ly4uL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3M/JyArIChuZXcg
RGF0ZSgpKS5nZXRUaW1lKCk7Citkb2MuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKK3ZhciBzY3Jp
cHQgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CitzY3JpcHQuc3JjID0gJy4uLy4uL1Nv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5qcz8nICsgKG5ldyBEYXRlKCkp
LmdldFRpbWUoKTsKK2RvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CisKK3ZhciBlbmdsaXNo
QXJndW1lbnRzID0geworICAgIGxvY2FsZTogJ2VuLVVTJywKKyAgICBtb250aExhYmVscyA6IFsn
SmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsCisg
ICAgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywg
J0RlY2VtYmVyJ10sCisgICAgZGF5TGFiZWxzIDogWydTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQn
LCAnVGh1JywgJ0ZyaScsICdTYXQnXSwKKyAgICB0b2RheUxhYmVsIDogJ1RvZGF5JywKKyAgICBj
bGVhckxhYmVsIDogJ0NsZWFyJywKKyAgICBjYW5jZWxMYWJlbCA6ICdDYW5jZWwnLAorICAgIHdl
ZWtTdGFydERheSA6IDAsCisgICAgc3RlcCA6IDEsCisgICAgbWF4IDogJzIwOTktMTItMzEnLAor
fTsKK3ZhciBqYXBhbmVzZUFyZ3VtZW50cyA9IHsKKyAgICBsb2NhbGU6ICdqYS1KUCcsCisgICAg
bW9udGhMYWJlbHMgOiBbJzHmnIgnLCAnMuaciCcsICcz5pyIJywgJzTmnIgnLCAnNeaciCcsICc2
5pyIJywKKyAgICAnN+aciCcsICc45pyIJywgJznmnIgnLCAnMTDmnIgnLCAnMTHmnIgnLCAnMTLm
nIgnXSwKKyAgICBkYXlMYWJlbHMgOiBbJ+aXpScsICfmnIgnLCAn54GrJywgJ+awtCcsICfmnKgn
LCAn6YeRJywgJ+WcnyddLAorICAgIHRvZGF5TGFiZWwgOiAn5LuK5pelJywKKyAgICBjbGVhckxh
YmVsIDogJ+OCr+ODquOCoicsCisgICAgY2FuY2VsTGFiZWwgOiAn5Y+W44KK5raI44GXJywKKyAg
ICB3ZWVrU3RhcnREYXkgOiAwLAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDk5LTAzLTE1
JywKK307CitzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgIGZyYW1lLmNvbnRlbnRXaW5kb3cu
cG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoZW5nbGlzaEFyZ3VtZW50cyksICIqIik7CisgICAg
ZnJhbWUuY29udGVudFdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAgPSBmdW5jdGlvbihudW1W
YWx1ZSwgc3RyaW5nVmFsdWUpIHsKKyAgICAgICAgd2luZG93LmxvZygnbnVtYmVyPScgKyBudW1W
YWx1ZSArICcsIHN0cmluZz0iJyArIHN0cmluZ1ZhbHVlICsgJyInKTsKKyAgICAgICAgaWYgKG51
bVZhbHVlID09IDApCisgICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J2RhdGUnKS52YWx1ZSA9IHN0cmluZ1ZhbHVlOworICAgIH07Cit9LCAxMDApOworCisKK2Z1bmN0
aW9uIGxvZyhzdHIpIHsKKyAgICB2YXIgZW50cnkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCds
aScpOworICAgIGVudHJ5LmlubmVyVGV4dCA9IHN0cjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGVudHJ5KTsKK30KKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135762</attachid>
            <date>2012-04-04 23:22:54 -0700</date>
            <delta_ts>2012-04-05 00:26:58 -0700</delta_ts>
            <desc>Patch 4</desc>
            <filename>bug-83011-20120405152252.patch</filename>
            <type>text/plain</type>
            <size>46578</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEzMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiMjA5MGNkYmQ4NTll
MTYxYjQxN2IyMjRhM2M4ZjczYWY0NzExNy4uNGVlNWM4ODkxZjgxOTUwZjdiYmUyZjViNGI4MzQy
MDA3YzI4M2JmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBBZGQgSmF2YVNjcmlwdCBh
bmQgQ1NTIGNvZGUgZm9yIHRoZSBjYWxlbmRhciBwaWNrZXIgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDExCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGVuZGFyUGlj
a2VyLmpzIGFuZCBjYWxlbmRhclBpY2tlci5jc3MsIGFuZCBhZGQgYSBidWlsZCBydWxlIHRvCisg
ICAgICAgIGdlbmVyYXRlIGEgQysrIGZpbGUuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgbWFrZSBhbnkg
YmVoYXZpb3IgY2hhbmdlCisgICAgICAgIGJlY2F1c2UgdGhlIGNvZGUgaXMgd3JhcHBlZCBieSBF
TkFCTEUoQ0FMRU5EQVJfUElDS0VSKS4KKworICAgICAgICBUZXN0czogTWFudWFsVGVzdHMvZm9y
bXMvY2FsZW5kYXItcGlja2VyLmh0bWwKKworICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBp
Y2tlci5jc3M6IEFkZGVkLgorICAgICAgICAqIFJlc291cmNlcy9jYWxlbmRhclBpY2tlci5qczog
QWRkZWQuCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6IEdlbmVyYXRlIENhbGVu
ZGFyUGlja2VyLntjcHAsaH0gZnJvbSBjYWxlbmRhclBpY2tlci57Y3NzLGpzfS4KKwogMjAxMi0w
NC0wNCAgQ2hyaXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFdhdmVU
YWJsZTo6d2F2ZURhdGFGb3JGdW5kYW1lbnRhbEZyZXF1ZW5jeSgpIHNob3VsZCBwcm9wZXJseSBp
bnRlcnByZXQgbmVnYXRpdmUgZnJlcXVlbmN5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9S
ZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmI1OTQzMWZhZjc5NGJiNzYxMTdmNzcwYjAw
ODg5MDZhMzNjOWZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L2NhbGVuZGFyUGlja2VyLmNzcwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2JvZHkgeworICAgIC13ZWJraXQt
dXNlci1zZWxlY3Q6IG5vbmU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlOworICAgIGZv
bnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDsKKyAgICBtYXJnaW46IDA7CisgICAgb3ZlcmZsb3c6
IGhpZGRlbjsKK30KKworLm5vLWZvY3VzLXJpbmcgOmZvY3VzIHsKKyAgICBvdXRsaW5lOiBub25l
OworfQorCisjbWFpbiB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVy
OiBzb2xpZCAxcHggIzg4OTlhYTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAycHggMnB4IDJweCB3
aGl0ZSwKKyAgICAgICAgaW5zZXQgLTJweCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMSk7CisgICAg
cGFkZGluZzogNnB4OworfQorCisueWVhci1tb250aC1hcmVhIHsKK30KKworLnllYXItbW9udGgt
dXBwZXIgeworICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OworfQorCisueWVhci1zZWxlY3RvciB7
CisgICAgdGV4dC1hbGlnbjogcmlnaHQ7CisgICAgd2lkdGg6IDZlbTsKK30KKworLm1vbnRoLXNl
bGVjdG9yLWJveCB7CisgICAgZGlzcGxheTogaW5saW5lLWJveDsKKyAgICB0ZXh0LWFsaWduOiBj
ZW50ZXI7CisgICAgLXdlYmtpdC1ib3gtZmxleDogMjsKK30KKworLm1vbnRoLXNlbGVjdG9yIHsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIHBhZGRpbmc6IDNweCA2cHggM3B4IDZweDsKK30K
Ky5tb250aC1zZWxlY3RvcjphZnRlciB7CisgICAgY29udGVudDogIiDilrwiOworICAgIGZvbnQt
c2l6ZTogc21hbGxlcjsKK30KKworLm1vbnRoLXNlbGVjdG9yLXBvcHVwIHsKKyAgICBkaXNwbGF5
OiBub25lOworICAgIG91dGxpbmU6IG5vbmU7CisgICAgei1pbmRleDogMjsKK30KKworLm1vbnRo
LXNlbGVjdG9yLXdhbGwgeworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgaGVpZ2h0OiAxMDAlOwor
ICAgIGxlZnQ6IDBweDsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwcHg7Cisg
ICAgd2lkdGg6IDEwMCU7Cit9CisKKy8qIEZJWE1FOiBXZSdkIGxpa2UgdG8gdXNlIHRoZSBzdGFu
ZGFyZCBidXR0b24gYXBwZWFyYW5jZSBmb3Igbm9uLU1hYy4gKi8KKy55ZWFyLW1vbnRoLWJ1dHRv
biB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGJhY2tncm91bmQ6IC13ZWJr
aXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2VlZSksIGNv
bG9yLXN0b3AoMC40LCAjZmZmKSwgY29sb3Itc3RvcCgwLjYsICNkZGRkZGQpLCB0bygjZWVlKSk7
CisgICAgYm9yZGVyOiBzb2xpZCAxcHggIzQ0NDsKKyAgICBib3JkZXItcmFkaXVzOiAzcHg7Cisg
ICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpLCBp
bnNldCAtMXB4IC0xcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsKKyAgICBwYWRkaW5nLWxl
ZnQ6IDNweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRv
bjpob3ZlciB7CisgICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQg
dG9wLCBsZWZ0IGJvdHRvbSwgZnJvbSgjZTBmMGZmKSwgY29sb3Itc3RvcCgwLjQsICNlMGYwZmYp
LCBjb2xvci1zdG9wKDAuNiwgI2IwZTBmZiksIHRvKCNiMGUwZmYpKTsKKyAgICBib3JkZXI6IHNv
bGlkIDFweCAjNDQ4OworfQorCisueWVhci1tb250aC1idXR0b246YWN0aXZlIHsKKyAgICBib3Jk
ZXI6IHNvbGlkIDFweCBibGFjazsKKyAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDFweCBy
Z2JhKDAsMCwwLDAuMyksIGluc2V0IC0xcHggLTFweCAxcHggcmdiYSgwLDAsMCwwLjMpOworfQor
CisueWVhci1tb250aC1idXR0b246ZGlzYWJsZWQgeworICAgIGNvbG9yOiAjODg4OworICAgIGJh
Y2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20s
IGZyb20oI2VlZSksIGNvbG9yLXN0b3AoMC40LCAjZmZmKSwgY29sb3Itc3RvcCgwLjYsICNkZGRk
ZGQpLCB0bygjZWVlKSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2NjYzsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAxcHggMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNCksIGluc2V0IC0xcHgg
LTFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpOworfQorCisueWVhci1tb250aC1idXR0b24t
bGVmdCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisueWVhci1tb250aC1idXR0
b24tcmlnaHQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLmRheXMtYXJlYS1j
b250YWluZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogc29s
aWQgMXB4IGJsYWNrOworICAgIG1hcmdpbi1ib3R0b206IDRweDsKKyAgICBtYXJnaW4tdG9wOiA0
cHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLmRheXMtYXJlYSB7IC8qIDx0YWJsZT4g
Ki8KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItY29sbGFwc2U6IHNl
cGFyYXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgZm9udDogLXdlYmtpdC1zbWFs
bC1jb250cm9sOworICAgIHRhYmxlLWxheW91dDogZml4ZWQ7CisgICAgd2lkdGg6IDEwMCU7Cit9
CisKKy5kYXktbGFiZWwgeyAvKiA8dGg+ICovCisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94OworICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U5ZmY7CisgICAgYm9yZGVyLWxlZnQt
Y29sb3I6ICNmMGY0ZmY7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogI2YwZjRmZjsKKyAgICBib3Jk
ZXI6IHNvbGlkIDFweCAjZDBkNGYwOworICAgIGNvbG9yOiAjMjBjOworICAgIGZvbnQtd2VpZ2h0
OiBub3JtYWw7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuZGF5IHsgLyogPHRkPiAq
LworICAgIHBhZGRpbmc6IDFweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgLXdl
YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCisuYXZhaWxhYmxlIHsKKyAgICBjdXJz
b3I6IGRlZmF1bHQ7CisgICAgZm9udC13ZWlnaHQ6IDcwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgICBib3JkZXItcmFkaXVz
OiA1cHg7CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOworfQorCisubm90
LXRoaXMtbW9udGggeworICAgIGNvbG9yOiBncmF5dGV4dDsKKyAgICBmb250LXdlaWdodDogNDAw
OworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCisuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogaGlnaGxpZ2h0OworICAgIGNvbG9yOiBoaWdobGlnaHR0
ZXh0OworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCisudW5hdmFpbGFibGUgeworICAgIGN1
cnNvcjogZGVmYXVsdDsKKyAgICBjb2xvcjogZ3JheXRleHQ7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogI2VlZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOworICAgIC13ZWJraXQtdHJhbnNp
dGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTsKK30KKworLnVuYXZhaWxhYmxlLmRheS1zZWxl
Y3RlZCB7CisgICAgYm9yZGVyOiAxcHggc29saWQgaGlnaGxpZ2h0OworfQorCisuY2FuY2VsLWJ1
dHRvbiB7CisgICAgZmxvYXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwNDE1Mjk1N2VkNDMwNzdhOTA3Y2ZlMjVkZjNh
OWMyZGU0NzQ1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMv
Y2FsZW5kYXJQaWNrZXIuanMKQEAgLTAsMCArMSwxMDY5IEBACisidXNlIHN0cmljdCI7CisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklY
TUU6CisvLyAgLSBSVEwKKy8vICAtIFRvdWNoIGV2ZW50CisKKy8qKgorICogQ1NTIGNsYXNzIG5h
bWVzLgorICoKKyAqIEBlbnVtIHtzdHJpbmd9CisgKi8KK3ZhciBDbGFzc05hbWVzID0geworICAg
IEF2YWlsYWJsZTogImF2YWlsYWJsZSIsCisgICAgQ2FuY2VsQnV0dG9uOiAiY2FuY2VsLWJ1dHRv
biIsCisgICAgQ2xlYXJCdXR0b246ICJjbGVhci1idXR0b24iLAorICAgIERheTogImRheSIsCisg
ICAgRGF5TGFiZWw6ICJkYXktbGFiZWwiLAorICAgIERheUxhYmVsQ29udGFpbmVyOiAiZGF5LWxh
YmVsLWNvbnRhaW5lciIsCisgICAgRGF5c0FyZWE6ICJkYXlzLWFyZWEiLAorICAgIERheXNBcmVh
Q29udGFpbmVyOiAiZGF5cy1hcmVhLWNvbnRhaW5lciIsCisgICAgTW9udGhTZWxlY3RvcjogIm1v
bnRoLXNlbGVjdG9yIiwKKyAgICBNb250aFNlbGVjdG9yQm94OiAibW9udGgtc2VsZWN0b3ItYm94
IiwKKyAgICBNb250aFNlbGVjdG9yUG9wdXA6ICJtb250aC1zZWxlY3Rvci1wb3B1cCIsCisgICAg
TW9udGhTZWxlY3RvcldhbGw6ICJtb250aC1zZWxlY3Rvci13YWxsIiwKKyAgICBOb0ZvY3VzUmlu
ZzogIm5vLWZvY3VzLXJpbmciLAorICAgIE5vdFRoaXNNb250aDogIm5vdC10aGlzLW1vbnRoIiwK
KyAgICBTZWxlY3RlZDogImRheS1zZWxlY3RlZCIsCisgICAgVG9kYXlCdXR0b246ICJ0b2RheS1i
dXR0b24iLAorICAgIFRvZGF5Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCisgICAgVW5h
dmFpbGFibGU6ICJ1bmF2YWlsYWJsZSIsCisgICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29udGFp
bmVyIiwKKyAgICBZZWFyTW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKKyAgICBZZWFyTW9u
dGhCdXR0b246ICJ5ZWFyLW1vbnRoLWJ1dHRvbiIsCisgICAgWWVhck1vbnRoQnV0dG9uTGVmdDog
InllYXItbW9udGgtYnV0dG9uLWxlZnQiLAorICAgIFllYXJNb250aEJ1dHRvblJpZ2h0OiAieWVh
ci1tb250aC1idXR0b24tcmlnaHQiLAorICAgIFllYXJNb250aFVwcGVyOiAieWVhci1tb250aC11
cHBlciIKK307CisKKy8qKgorICogQHR5cGUge09iamVjdH0KKyAqLwordmFyIGdsb2JhbCA9IHsK
KyAgICBhcmd1bWVudHNSZWNlaXZlZDogZmFsc2UsCisgICAgaGFkS2V5RXZlbnQ6IGZhbHNlLAor
ICAgIHBhcmFtczogbnVsbAorfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVXRpbGl0eSBmdW5jdGlvbnMK
KworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IGlkCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAg
ICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitmdW5jdGlvbiBiaW5k
KGZ1bmMsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVy
biBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKK30KKworLyoqCisgKiBA
cGFyYW0geyFzdHJpbmd9IHRhZ05hbWUKKyAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCisg
KiBAcGFyYW0ge3N0cmluZz19IG9wdF90ZXh0CisgKiBAcmV0dXJuIHshRWxlbWVudH0KKyAqLwor
ZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7Cisg
ICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGlm
IChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9j
bGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9
CisKKy8qKgorICogQHJldHVybiB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2FsZSBuYW1lLiBlLmcu
ICJlbi11cyIKKyAqLworZnVuY3Rpb24gZ2V0TG9jYWxlKCkgeworICAgIHJldHVybiAoZ2xvYmFs
LnBhcmFtcy5sb2NhbGUgfHwgImVuLXVzIikudG9Mb3dlckNhc2UoKTsKK30KKworLyoqCisgKiBA
cmV0dXJuIHshc3RyaW5nfSBsb3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5nLiAiZW4iCisgKi8K
K2Z1bmN0aW9uIGdldExhbmd1YWdlKCkgeworICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTsK
KyAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuICJlbiI7CisgICAgcmV0dXJuIHJlc3VsdFsxXTsKK30KKwor
LyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgK
KyAqIEByZXR1cm4geyFzdHJpbmd9CisgKi8KK2Z1bmN0aW9uIGZvcm1hdEphcGFuZXNlSW1wZXJp
YWxFcmEoeWVhciwgbW9udGgpIHsKKyAgICBpZiAoeWVhciA+IDE5ODkpCisgICAgICAgIHJldHVy
biAiKOW5s+aIkCIgKyAoeWVhciAtIDE5ODgpICsgIuW5tCkiOworICAgIGlmICh5ZWFyID09IDE5
ODkpCisgICAgICAgIHJldHVybiAiKOW5s+aIkOWFg+W5tCkiOworICAgIGlmICh5ZWFyID49IDE5
MjcpCisgICAgICAgIHJldHVybiAiKOaYreWSjCIgKyAoeWVhciAtIDE5MjUpICsgIuW5tCkiOwor
ICAgIGlmICh5ZWFyID4gMTkxMikKKyAgICAgICAgcmV0dXJuICIo5aSn5q2jIiArICh5ZWFyIC0g
MTkxMSkgKyAi5bm0KSI7CisgICAgaWYgKHllYXIgPT0gMTkxMiAmJiBtb250aCA+PSA3KQorICAg
ICAgICByZXR1cm4gIijlpKfmraPlhYPlubQpIjsKKyAgICBpZiAoeWVhciA+IDE4NjgpCisgICAg
ICAgIHJldHVybiAiKOaYjuayuyIgKyAoeWVhciAtIDE4NjcpICsgIuW5tCkiOworICAgIGlmICh5
ZWFyID09IDE4NjgpCisgICAgICAgIHJldHVybiAiKOaYjuayu+WFg+W5tCkiOworICAgIHJldHVy
biAiIjsKK30KKworZnVuY3Rpb24gZm9ybWF0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7CisgICAg
Ly8gRklYTUU6IE5lZWQgbG9jYWxpemVkIG51bWJlcj8KKyAgICB2YXIgeWVhclN0cmluZyA9IFN0
cmluZyh5ZWFyKTsKKyAgICB2YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1vbnRoTGFi
ZWxzW21vbnRoXTsKKyAgICBzd2l0Y2ggKGdldExhbmd1YWdlKCkpIHsKKyAgICBjYXNlICJldSI6
CisgICAgY2FzZSAiZmlsIjoKKyAgICBjYXNlICJsdCI6CisgICAgY2FzZSAibWwiOgorICAgIGNh
c2UgIm10IjoKKyAgICBjYXNlICJ0bCI6CisgICAgY2FzZSAidXIiOgorICAgICAgICByZXR1cm4g
eWVhclN0cmluZyArICIgIiArIG1vbnRoU3RyaW5nOworICAgIGNhc2UgImh1IjoKKyAgICAgICAg
cmV0dXJuIHllYXJTdHJpbmcgKyAiLiAiICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAiamEiOgor
ICAgICAgICByZXR1cm4geWVhclN0cmluZyArICLlubQiICsgZm9ybWF0SmFwYW5lc2VJbXBlcmlh
bEVyYSh5ZWFyLCBtb250aCkgKyAiICIgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICJ6aCI6Cisg
ICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuW5tCIgKyBtb250aFN0cmluZzsKKyAgICBjYXNl
ICJrbyI6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuuFhCAiICsgbW9udGhTdHJpbmc7
CisgICAgY2FzZSAibHYiOgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICIuIGcuICIgKyBt
b250aFN0cmluZzsKKyAgICBjYXNlICJwdCI6CisgICAgICAgIHJldHVybiBtb250aFN0cmluZyAr
ICIgZGUgIiArIHllYXJTdHJpbmc7CisgICAgY2FzZSAic3IiOgorICAgICAgICByZXR1cm4gbW9u
dGhTdHJpbmcgKyAiLiAiICsgeWVhclN0cmluZzsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gbW9udGhTdHJpbmcgKyAiICIgKyB5ZWFyU3RyaW5nOworICAgIH0KK30KKworLyoqCisgKiBA
cGFyYW0ge3N0cmluZz19IG9wdF9jdXJyZW50CisgKiBAcmV0dXJuIHshRGF0ZX0KKyAqLworZnVu
Y3Rpb24gcGFyc2VEYXRlU3RyaW5nKG9wdF9jdXJyZW50KSB7CisgICAgaWYgKG9wdF9jdXJyZW50
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBvcHRfY3VycmVudC5tYXRjaCgvKFxkKyktKFxkKykt
KFxkKykvKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0
ZShEYXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwgTnVtYmVyKHJlc3VsdFsyXSkgLSAxLCBOdW1i
ZXIocmVzdWx0WzNdKSkpOworICAgIH0KKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAv
LyBDcmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51bWJlcnMgYXMgbG9jYWwgZGF0ZS4KKyAgICBy
ZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgp
LCBub3cuZ2V0RGF0ZSgpKSk7Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisg
KiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0geyFudW1iZXJ9IGRheQorICogQHJl
dHVybiB7IXN0cmluZ30KKyAqLworZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh5ZWFyLCBtb250aCwg
ZGF5KSB7CisgICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmcoeWVhcik7CisgICAgaWYgKHllYXJT
dHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHllYXJTdHJp
bmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLSIgKyAoIjAiICsg
KG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAiLSIgKyAoIjAiICsgZGF5KS5zdWJzdHIoLTIs
IDIpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbml0aWFsaXphdGlvbgorCisvKioKKyAqIEBwYXJh
bSB7RXZlbnR9IGV2ZW50CisgKi8KK2Z1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHsKKyAg
ICBpZiAoZ2xvYmFsLmFyZ3VtZW50c1JlY2VpdmVkKQorICAgICAgICByZXR1cm47CisgICAgZ2xv
YmFsLmFyZ3VtZW50c1JlY2VpdmVkID0gdHJ1ZTsKKyAgICBpbml0aWFsaXplKEpTT04ucGFyc2Uo
ZXZlbnQuZGF0YSkpOworfQorCitmdW5jdGlvbiBoYW5kbGVBcmd1bWVudHNUaW1lb3V0KCkgewor
ICAgIGlmIChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICB2
YXIgYXJncyA9IHsKKyAgICAgICAgbW9udGhMYWJlbHMgOiBbIm0xIiwgIm0yIiwgIm0zIiwgIm00
IiwgIm01IiwgIm02IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIm03IiwgIm04IiwgIm05Iiwg
Im0xMCIsICJtMTEiLCAibTEyIl0sCisgICAgICAgIGRheUxhYmVscyA6IFsiZDEiLCAiZDIiLCAi
ZDMiLCAiZDQiLCAiZDUiLCAiZDYiLCAiZDciXSwKKyAgICAgICAgdG9kYXlMYWJlbCA6ICJUb2Rh
eSIsCisgICAgICAgIGNsZWFyTGFiZWwgOiAiQ2xlYXIiLAorICAgICAgICBjYW5jZWxMYWJlbCA6
ICJDYW5jZWwiLAorICAgICAgICBjdXJyZW50VmFsdWUgOiAiIiwKKyAgICAgICAgd2Vla1N0YXJ0
RGF5IDogMCwKKyAgICAgICAgc3RlcCA6IDEKKyAgICB9OworICAgIGluaXRpYWxpemUoYXJncyk7
Cit9CisKKy8qKgorICogQHBhcmFtIHshT2JqZWN0fSBhcmdzCisgKiBAcmV0dXJuIHs/c3RyaW5n
fSBBbiBlcnJvciBtZXNzYWdlLCBvciBudWxsIGlmIHRoZSBhcmd1bWVudCBoYXMgbm8gZXJyb3Jz
LgorICovCitmdW5jdGlvbiB2YWxpZGF0ZUFyZ3VtZW50cyhhcmdzKSB7CisgICAgaWYgKCFhcmdz
Lm1vbnRoTGFiZWxzKQorICAgICAgICByZXR1cm4gIk5vIG1vbnRoTGFiZWxzLiI7CisgICAgaWYg
KGFyZ3MubW9udGhMYWJlbHMubGVuZ3RoICE9IDEyKQorICAgICAgICByZXR1cm4gIm1vbnRoTGFi
ZWxzIGlzIG5vdCBhbiBhcnJheSB3aXRoIDEyIGVsZW1lbnRzLiI7CisgICAgaWYgKCFhcmdzLmRh
eUxhYmVscykKKyAgICAgICAgcmV0dXJuICJObyBkYXlMYWJlbHMuIjsKKyAgICBpZiAoYXJncy5k
YXlMYWJlbHMubGVuZ3RoICE9IDcpCisgICAgICAgIHJldHVybiAiZGF5TGFiZWxzIGlzIG5vdCBh
biBhcnJheSB3aXRoIDcgZWxlbWVudHMuIjsKKyAgICBpZiAoIWFyZ3MuY2xlYXJMYWJlbCkKKyAg
ICAgICAgcmV0dXJuICJObyBjbGVhckxhYmVsLiI7CisgICAgaWYgKCFhcmdzLnRvZGF5TGFiZWwp
CisgICAgICAgIHJldHVybiAiTm8gdG9kYXlMYWJlbC4iOworICAgIGlmIChhcmdzLndlZWtTdGFy
dERheSkgeworICAgICAgICBpZiAoYXJncy53ZWVrU3RhcnREYXkgPCAwIHx8IGFyZ3Mud2Vla1N0
YXJ0RGF5ID4gNikKKyAgICAgICAgICAgIHJldHVybiAiSW52YWxpZCB3ZWVrU3RhcnREYXk6ICIg
KyBhcmdzLndlZWtTdGFydERheTsKKyAgICB9CisgICAgcmV0dXJuIG51bGw7Cit9CisKKy8qKgor
ICogQHBhcmFtIHshT2JqZWN0fSBhcmdzCisgKi8KK2Z1bmN0aW9uIGluaXRpYWxpemUoYXJncykg
eworICAgIHZhciBtYWluID0gJCgibWFpbiIpOworICAgIG1haW4uY2xhc3NMaXN0LmFkZChDbGFz
c05hbWVzLk5vRm9jdXNSaW5nKTsKKworICAgIHZhciBlcnJvclN0cmluZyA9IHZhbGlkYXRlQXJn
dW1lbnRzKGFyZ3MpOworICAgIGlmIChlcnJvclN0cmluZykKKyAgICAgICAgbWFpbi50ZXh0Q29u
dGVudCA9ICJJbnRlcm5hbCBlcnJvcjogIiArIGVycm9yU3RyaW5nOworICAgIGVsc2UgeworICAg
ICAgICBnbG9iYWwucGFyYW1zID0gYXJnczsKKyAgICAgICAgY2hlY2tMaW1pdHMoKTsKKyAgICAg
ICAgbGF5b3V0KCk7CisKKyAgICAgICAgdmFyIGluaXRpYWxEYXRlID0gcGFyc2VEYXRlU3RyaW5n
KGFyZ3MuY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKGluaXRpYWxEYXRlIDwgZ2xvYmFsLm1p
bmltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWluaW11bURhdGU7
CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xvYmFsLm1heGltdW1EYXRlKQorICAg
ICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11bURhdGU7CisgICAgICAgIGdsb2Jh
bC5kYXlzVGFibGUuc2VsZWN0RGF0ZShpbml0aWFsRGF0ZSk7CisKKyAgICAgICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cuZnJhbWVFbGVtZW50KQorICAg
ICAgICAgICAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gbWFpbi5vZmZz
ZXRIZWlnaHQgKyAicHgiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHdpbmRv
dy5yZXNpemVUbyh3aW5kb3cub3V0ZXJXaWR0aCwgbWFpbi5vZmZzZXRUb3AgKyBtYWluLm9mZnNl
dEhlaWdodCk7CisgICAgICAgIH0sIDApOworICAgIH0KK30KKworZnVuY3Rpb24gY2hlY2tMaW1p
dHMoKSB7CisgICAgLy8gSGFyZCBsaW1pdHMgb2YgdHlwZT1kYXRlLiBTZWUgV2ViQ29yZS9wbGF0
Zm9ybS9EYXRlQ29tcG9uZW50cy5oLgorICAgIGdsb2JhbC5taW5pbXVtRGF0ZSA9IG5ldyBEYXRl
KC02MjEzNTU5NjgwMDAwMC4wKTsKKyAgICBnbG9iYWwubWF4aW11bURhdGUgPSBuZXcgRGF0ZSg4
NjQwMDAwMDAwMDAwMDAwLjApOworICAgIC8vIFNlZSBXZWJDb3JlL2h0bWwvRGF0ZUlucHV0VHlw
ZS5jcHAuCisgICAgZ2xvYmFsLnN0ZXAgPSA4NjQwMDAwMDsKKworICAgIGlmIChnbG9iYWwucGFy
YW1zLm1pbikgeworICAgICAgICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1pbiBpcyBhIHZhbGlkIGRh
dGUuCisgICAgICAgIGdsb2JhbC5taW5pbXVtRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyhnbG9iYWwu
cGFyYW1zLm1pbik7CisgICAgfQorICAgIGlmIChnbG9iYWwucGFyYW1zLm1heCkgeworICAgICAg
ICAvLyBXZSBhc3N1bWUgcGFyYW1zLm1heCBpcyBhIHZhbGlkIGRhdGUuCisgICAgICAgIGdsb2Jh
bC5tYXhpbXVtRGF0ZSA9IHBhcnNlRGF0ZVN0cmluZyhnbG9iYWwucGFyYW1zLm1heCk7CisgICAg
fQorICAgIGlmIChnbG9iYWwucGFyYW1zLnN0ZXApCisgICAgICAgIGdsb2JhbC5zdGVwICo9IGds
b2JhbC5wYXJhbXMuc3RlcDsKK30KKworZnVuY3Rpb24gbGF5b3V0KCkgeworICAgIHZhciBtYWlu
ID0gJCgibWFpbiIpOworICAgIHZhciBwYXJhbXMgPSBnbG9iYWwucGFyYW1zOworICAgIG1haW4u
cmVtb3ZlQ2hpbGQobWFpbi5maXJzdENoaWxkKTsKKyAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50
TGlzdGVuZXIoImtleWRvd24iLCBoYW5kbGVHbG9iYWxLZXksIGZhbHNlKTsKKworICAgIGdsb2Jh
bC55ZWFyTW9udGhDb250cm9sbGVyID0gbmV3IFllYXJNb250aENvbnRyb2xsZXIoKTsKKyAgICBn
bG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5hdHRhY2hUbyhtYWluKTsKKyAgICBnbG9iYWwuZGF5
c1RhYmxlID0gbmV3IERheXNUYWJsZSgpOworICAgIGdsb2JhbC5kYXlzVGFibGUuYXR0YWNoVG8o
bWFpbik7CisgICAgbGF5b3V0QnV0dG9ucyhtYWluKTsKK30KKworLyoqCisgKiBAcGFyYW0ge0Vs
ZW1lbnR9IG1haW4KKyAqLworZnVuY3Rpb24gbGF5b3V0QnV0dG9ucyhtYWluKSB7CisgICAgdmFy
IGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuVG9kYXlDbGVhckFy
ZWEpOworICAgIGdsb2JhbC50b2RheSA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1l
cy5Ub2RheUJ1dHRvbik7CisgICAgZ2xvYmFsLnRvZGF5LnR5cGUgPSAiYnV0dG9uIjsKKyAgICBn
bG9iYWwudG9kYXkudmFsdWUgPSBnbG9iYWwucGFyYW1zLnRvZGF5TGFiZWw7CisgICAgZ2xvYmFs
LnRvZGF5LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlVG9kYXksIGZhbHNlKTsKKyAg
ICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZ2xvYmFsLnRvZGF5KTsKKyAgICBnbG9iYWwuY2xlYXIg
PSBudWxsOworICAgIGlmICghZ2xvYmFsLnBhcmFtcy5yZXF1aXJlZCkgeworICAgICAgICBnbG9i
YWwuY2xlYXIgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuQ2xlYXJCdXR0b24p
OworICAgICAgICBnbG9iYWwuY2xlYXIudHlwZSA9ICJidXR0b24iOworICAgICAgICBnbG9iYWwu
Y2xlYXIudmFsdWUgPSBnbG9iYWwucGFyYW1zLmNsZWFyTGFiZWw7CisgICAgICAgIGdsb2JhbC5j
bGVhci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGhhbmRsZUNsZWFyLCBmYWxzZSk7CisgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChnbG9iYWwuY2xlYXIpOworICAgIH0KKyAgICBtYWlu
LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisKKyAgICBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRy
b2wgPSBnbG9iYWwuY2xlYXIgfHwgZ2xvYmFsLnRvZGF5OworfQorCisvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8q
KgorICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIFllYXJNb250aENvbnRyb2xsZXIoKSB7
CisgICAgLyoqCisgICAgICogQHR5cGUgeyFudW1iZXJ9CisgICAgICovCisgICAgdGhpcy5fY3Vy
cmVudFllYXIgPSAtMTsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8K
KyAgICB0aGlzLl9jdXJyZW50TW9udGggPSAtMTsKK30KKworLyoqCisgKiBAcGFyYW0geyFFbGVt
ZW50fSBtYWluCisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLmF0dGFjaFRvID0g
ZnVuY3Rpb24obWFpbikgeworICAgIHZhciBvdXRlckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQo
ImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRoQXJlYSk7CisKKyAgICB2YXIgaW5uZXJDb250YWlu
ZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlllYXJNb250aFVwcGVyKTsKKyAg
ICBvdXRlckNvbnRhaW5lci5hcHBlbmRDaGlsZChpbm5lckNvbnRhaW5lcik7CisKKyAgICB0aGlz
Ll9hdHRhY2hMZWZ0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsKKworICAgIHZhciBib3ggPSBj
cmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JCb3gpOworICAgIGlu
bmVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGJveCk7CisgICAgLy8gV2UgY2FuJ3QgdXNlIDxzZWxl
Y3Q+IHBvcHVwIGluIFBhZ2VQb3B1cC4KKyAgICAvLyBGSVhNRTogVGhlIHBvcHVwLW1lbnUgZW11
bGF0aW9uIGJ5IGEgbGlzdGJveCBpcyBub3QgZ3JlYXQuCisgICAgdGhpcy5fbW9udGhQb3B1cCA9
IGNyZWF0ZUVsZW1lbnQoInNlbGVjdCIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwKTsK
KyAgICB0aGlzLl9tb250aFBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlz
Ll9oYW5kbGVZZWFyTW9udGhDaGFuZ2UsIHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5fbW9udGhQ
b3B1cC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgYmluZCh0aGlzLl9oYW5kbGVNb250aFBv
cHVwS2V5LCB0aGlzKSwgZmFsc2UpOworICAgIGJveC5hcHBlbmRDaGlsZCh0aGlzLl9tb250aFBv
cHVwKTsKKyAgICB0aGlzLl9tb250aCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMu
TW9udGhTZWxlY3Rvcik7CisgICAgdGhpcy5fbW9udGguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBiaW5kKHRoaXMuX3Nob3dQb3B1cCwgdGhpcyksIGZhbHNlKTsKKyAgICBib3guYXBwZW5kQ2hp
bGQodGhpcy5fbW9udGgpOworCisgICAgdGhpcy5fYXR0YWNoUmlnaHRCdXR0b25zVG8oaW5uZXJD
b250YWluZXIpOworICAgIG1haW4uYXBwZW5kQ2hpbGQob3V0ZXJDb250YWluZXIpOworCisgICAg
dGhpcy5fd2FsbCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3Rv
cldhbGwpOworICAgIHRoaXMuX3dhbGwuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRo
aXMuX2Nsb3NlUG9wdXAsIHRoaXMpLCBmYWxzZSk7CisgICAgbWFpbi5hcHBlbmRDaGlsZCh0aGlz
Ll93YWxsKTsKKworICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wgPSB0aGlzLl9sZWZ0
MjsgLy8gRklYTUU6IFNob3VkIGl0IGJlIHRoaXMubW9udGg/Cit9OworCitZZWFyTW9udGhDb250
cm9sbGVyLmFkZFRlblllYXJzQnV0dG9ucyA9IGZhbHNlOworCisvKioKKyAqIEBwYXJhbSB7IUVs
ZW1lbnR9IHBhcmVudAorICovCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fYXR0YWNo
TGVmdEJ1dHRvbnNUbyA9IGZ1bmN0aW9uKHBhcmVudCkgeworICAgIHZhciBjb250YWluZXIgPSBj
cmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbkxlZnQpOworICAg
IHBhcmVudC5hcHBlbmRDaGlsZChjb250YWluZXIpOworCisgICAgaWYgKFllYXJNb250aENvbnRy
b2xsZXIuYWRkVGVuWWVhcnNCdXR0b25zKSB7CisgICAgICAgIHRoaXMuX2xlZnQzID0gY3JlYXRl
RWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CisgICAgICAgIHRo
aXMuX2xlZnQzLnR5cGUgPSAiYnV0dG9uIjsKKyAgICAgICAgdGhpcy5fbGVmdDMudmFsdWUgPSAi
PDw8IjsKKyAgICAgICAgdGhpcy5fbGVmdDMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5k
KHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgICAgICBjb250YWlu
ZXIuYXBwZW5kQ2hpbGQodGhpcy5fbGVmdDMpOworICAgIH0KKworICAgIHRoaXMuX2xlZnQyID0g
Y3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CisgICAg
dGhpcy5fbGVmdDIudHlwZSA9ICJidXR0b24iOworICAgIHRoaXMuX2xlZnQyLnZhbHVlID0gIjw8
IjsKKyAgICB0aGlzLl9sZWZ0Mi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5f
aGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKHRoaXMuX2xlZnQyKTsKKworICAgIHRoaXMuX2xlZnQxID0gY3JlYXRlRWxlbWVudCgiaW5w
dXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CisgICAgdGhpcy5fbGVmdDEudHlwZSA9
ICJidXR0b24iOworICAgIHRoaXMuX2xlZnQxLnZhbHVlID0gIjwiOworICAgIHRoaXMuX2xlZnQx
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywg
dGhpcyksIGZhbHNlKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fbGVmdDEpOwor
fTsKKworLyoqCisgKiBAcGFyYW0geyFFbGVtZW50fSBwYXJlbnQKKyAqLworWWVhck1vbnRoQ29u
dHJvbGxlci5wcm90b3R5cGUuX2F0dGFjaFJpZ2h0QnV0dG9uc1RvID0gZnVuY3Rpb24ocGFyZW50
KSB7CisgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMu
WWVhck1vbnRoQnV0dG9uUmlnaHQpOworICAgIHBhcmVudC5hcHBlbmRDaGlsZChjb250YWluZXIp
OworICAgIHRoaXMuX3JpZ2h0MSA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5Z
ZWFyTW9udGhCdXR0b24pOworICAgIHRoaXMuX3JpZ2h0MS50eXBlID0gImJ1dHRvbiI7CisgICAg
dGhpcy5fcmlnaHQxLnZhbHVlID0gIj4iOworICAgIHRoaXMuX3JpZ2h0MS5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7
CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JpZ2h0MSk7CisKKyAgICB0aGlzLl9y
aWdodDIgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9u
KTsKKyAgICB0aGlzLl9yaWdodDIudHlwZSA9ICJidXR0b24iOworICAgIHRoaXMuX3JpZ2h0Mi52
YWx1ZSA9ICI+PiI7CisgICAgdGhpcy5fcmlnaHQyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
YmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAgICBjb250YWlu
ZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmlnaHQyKTsKKworICAgIGlmIChZZWFyTW9udGhDb250cm9s
bGVyLmFkZFRlblllYXJzQnV0dG9ucykgeworICAgICAgICB0aGlzLl9yaWdodDMgPSBjcmVhdGVF
bGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9uKTsKKyAgICAgICAgdGhp
cy5fcmlnaHQzLnR5cGUgPSAiYnV0dG9uIjsKKyAgICAgICAgdGhpcy5fcmlnaHQzLnZhbHVlID0g
Ij4+PiI7CisgICAgICAgIHRoaXMuX3JpZ2h0My5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJp
bmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgICAgIGNvbnRh
aW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDMpOworICAgIH0KK307CisKKy8qKgorICogQHJl
dHVybiB7IW51bWJlcn0KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUueWVhciA9
IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiB0aGlzLl9jdXJyZW50WWVhcjsKK307CisKKy8qKgor
ICogQHJldHVybiB7IW51bWJlcn0KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUu
bW9udGggPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5fY3VycmVudE1vbnRoOworfTsK
KworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7IW51bWJlcn0gbW9u
dGgKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuc2V0WWVhck1vbnRoID0gZnVu
Y3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICB0aGlzLl9jdXJyZW50WWVhciA9IHllYXI7CisgICAg
dGhpcy5fY3VycmVudE1vbnRoID0gbW9udGg7CisgICAgdGhpcy5fcmVkcmF3KCk7Cit9OworCitZ
ZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fcmVkcmF3ID0gZnVuY3Rpb24oKSB7CisgICAg
dmFyIG1pbiA9IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9i
YWwubWluaW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgbWF4ID0gZ2xvYmFsLm1heGlt
dW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENN
b250aCgpOworICAgIHZhciBjdXJyZW50ID0gdGhpcy5fY3VycmVudFllYXIgKiAxMiArIHRoaXMu
X2N1cnJlbnRNb250aDsKKyAgICBpZiAodGhpcy5fbGVmdDMpCisgICAgICAgIHRoaXMuX2xlZnQz
LmRpc2FibGVkID0gY3VycmVudCAtIDEzIDwgbWluOworICAgIHRoaXMuX2xlZnQyLmRpc2FibGVk
ID0gY3VycmVudCAtIDIgPCBtaW47CisgICAgdGhpcy5fbGVmdDEuZGlzYWJsZWQgPSBjdXJyZW50
IC0gMSA8IG1pbjsKKyAgICB0aGlzLl9yaWdodDEuZGlzYWJsZWQgPSBjdXJyZW50ICsgMSA+IG1h
eDsKKyAgICB0aGlzLl9yaWdodDIuZGlzYWJsZWQgPSBjdXJyZW50ICsgMiA+IG1heDsKKyAgICBp
ZiAodGhpcy5fcmlnaHQzKQorICAgICAgICB0aGlzLl9yaWdodDMuZGlzYWJsZWQgPSBjdXJyZW50
ICsgMTMgPiBtYXg7CisgICAgdGhpcy5fbW9udGguaW5uZXJUZXh0ID0gZm9ybWF0WWVhck1vbnRo
KHRoaXMuX2N1cnJlbnRZZWFyLCB0aGlzLl9jdXJyZW50TW9udGgpOworICAgIHdoaWxlICh0aGlz
Ll9tb250aFBvcHVwLmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgdGhpcy5fbW9udGhQb3B1cC5y
ZW1vdmVDaGlsZCh0aGlzLl9tb250aFBvcHVwLmZpcnN0Q2hpbGQpOworICAgIGZvciAodmFyIG0g
PSBjdXJyZW50IC0gNjsgbSA8PSBjdXJyZW50ICsgNjsgbSsrKSB7CisgICAgICAgIGlmIChtIDwg
bWluIHx8IG0gPiBtYXgpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdmFyIG9wdGlv
biA9IGNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIsIHVuZGVmaW5lZCwgZm9ybWF0WWVhck1vbnRoKE1h
dGguZmxvb3IobSAvIDEyKSwgbSAlIDEyKSk7CisgICAgICAgIG9wdGlvbi52YWx1ZSA9IFN0cmlu
ZyhNYXRoLmZsb29yKG0gLyAxMikpICsgIi0iICsgU3RyaW5nKG0gJSAxMik7CisgICAgICAgIHRo
aXMuX21vbnRoUG9wdXAuYXBwZW5kQ2hpbGQob3B0aW9uKTsKKyAgICAgICAgaWYgKG0gPT0gY3Vy
cmVudCkKKyAgICAgICAgICAgIG9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CisgICAgfQorfTsKKwor
WWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3Nob3dQb3B1cCA9IGZ1bmN0aW9uKCkgewor
ICAgIHRoaXMuX21vbnRoUG9wdXAuc2l6ZSA9IE1hdGgubWF4KDQsIE1hdGgubWluKDEwLCB0aGlz
Ll9tb250aFBvcHVwLmxlbmd0aCkpOworICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUuZGlzcGxh
eSA9ICJibG9jayI7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS5wb3NpdGlvbiA9ICJhYnNv
bHV0ZSI7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS56SW5kZXggPSAiMTAwMCI7IC8vIExh
cmdlciB0aGFuIHRoZSBkYXlzIGFyZWEuCisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS5sZWZ0
ID0gdGhpcy5fbW9udGgub2Zmc2V0TGVmdCArICJweCI7CisgICAgdGhpcy5fbW9udGhQb3B1cC5z
dHlsZS50b3AgPSB0aGlzLl9tb250aC5vZmZzZXRUb3AgKyB0aGlzLl9tb250aC5vZmZzZXRIZWln
aHQgKyAicHgiOworICAgIHRoaXMuX21vbnRoUG9wdXAuZm9jdXMoKTsKKworICAgIHRoaXMuX3dh
bGwuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgdGhpcy5fd2FsbC5zdHlsZS56SW5kZXgg
PSAiOTk5IjsgLy8gVGhpcyBzaG91bGQgYmUgc21hbGxlciB0aGFuIHRoZSB6LWluZGV4IG9mIG1v
bnRoUG9wdXAuCit9OworCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fY2xvc2VQb3B1
cCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUuZGlzcGxheSA9ICJu
b25lIjsKKyAgICB0aGlzLl93YWxsLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Cit9OworCisvKioK
KyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90
eXBlLl9oYW5kbGVNb250aFBvcHVwS2V5ID0gZnVuY3Rpb24oZXZlbnQpCit7CisgICAgdmFyIGtl
eSA9IGV2ZW50LmtleUlkZW50aWZpZXI7CisgICAgaWYgKGtleSA9PSAiVSswMDFCIikgeworICAg
ICAgICB0aGlzLl9jbG9zZVBvcHVwKCk7CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0gZWxzZSBpZiAoa2V5ID09
ICJFbnRlciIpIHsKKyAgICAgICAgdGhpcy5faGFuZGxlWWVhck1vbnRoQ2hhbmdlKCk7CisgICAg
ICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOworICAgIH0KK30KKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZVll
YXJNb250aENoYW5nZSA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX2Nsb3NlUG9wdXAoKTsKKwor
ICAgIHZhciByZXN1bHQgPSB0aGlzLl9tb250aFBvcHVwLnZhbHVlLm1hdGNoKC8oXGQrKS0oXGQr
KS8pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CisgICAgdmFyIG5ld1llYXIg
PSBOdW1iZXIocmVzdWx0WzFdKTsKKyAgICB2YXIgbmV3TW9udGggPSBOdW1iZXIocmVzdWx0WzJd
KTsKKyAgICBnbG9iYWwuZGF5c1RhYmxlLm5hdmlnYXRlVG9Nb250aEFuZEtlZXBTZWxlY3Rpb25Q
b3NpdGlvbihuZXdZZWFyLCBuZXdNb250aCk7Cit9OworCisvKgorICogQGNvbnN0CisgKiBAdHlw
ZSB7bnVtYmVyfQorICovCitZZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzVGVuWWVhcnMgPSAt
MTIwOworLyoKKyAqIEBjb25zdAorICogQHR5cGUge251bWJlcn0KKyAqLworWWVhck1vbnRoQ29u
dHJvbGxlci5QcmV2aW91c1llYXIgPSAtMTI7CisvKgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVt
YmVyfQorICovCitZZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzTW9udGggPSAtMTsKKy8qCisg
KiBAY29uc3QKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIuTmV4
dE1vbnRoID0gMTsKKy8qCisgKiBAY29uc3QKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK1llYXJN
b250aENvbnRyb2xsZXIuTmV4dFllYXIgPSAxMjsKKy8qCisgKiBAY29uc3QKKyAqIEB0eXBlIHtu
dW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIuTmV4dFRlblllYXJzID0gMTIwOworCisv
KioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJv
dG90eXBlLl9oYW5kbGVCdXR0b25DbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2
ZW50LnRhcmdldCA9PSB0aGlzLl9sZWZ0MykKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZ
ZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzVGVuWWVhcnMpOworICAgIGVsc2UgaWYgKGV2ZW50
LnRhcmdldCA9PSB0aGlzLl9sZWZ0MikKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFy
TW9udGhDb250cm9sbGVyLlByZXZpb3VzWWVhcik7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0
ID09IHRoaXMuX2xlZnQxKQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENv
bnRyb2xsZXIuUHJldmlvdXNNb250aCk7CisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRo
aXMuX3JpZ2h0MSkKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9s
bGVyLk5leHRNb250aCkKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQy
KQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuTmV4dFll
YXIpOworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9yaWdodDMpCisgICAgICAg
IHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5OZXh0VGVuWWVhcnMpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9
IGFtb3VudAorICovCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5tb3ZlUmVsYXRpdmVs
eSA9IGZ1bmN0aW9uKGFtb3VudCkgeworICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUu
Z2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7
CisgICAgdmFyIG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIg
KyBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgY3VycmVudCA9IHRo
aXMuX2N1cnJlbnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50TW9udGg7CisgICAgdmFyIHVwZGF0
ZWQgPSBjdXJyZW50OworICAgIGlmIChhbW91bnQgPCAwKQorICAgICAgICB1cGRhdGVkID0gY3Vy
cmVudCArIGFtb3VudCA+PSBtaW4gPyBjdXJyZW50ICsgYW1vdW50IDogbWluOworICAgIGVsc2UK
KyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBhbW91bnQgPD0gbWF4ID8gY3VycmVudCArIGFt
b3VudCA6IG1heDsKKyAgICBpZiAodXBkYXRlZCA9PSBjdXJyZW50KQorICAgICAgICByZXR1cm47
CisgICAgZ2xvYmFsLmRheXNUYWJsZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9uUG9z
aXRpb24oTWF0aC5mbG9vcih1cGRhdGVkIC8gMTIpLCB1cGRhdGVkICUgMTIpOworfTsKKworLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBEYXlzVGFibGUo
KSB7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFudW1iZXJ9CisgICAgICovCisgICAgdGhpcy5f
eCA9IC0xOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLworICAgIHRo
aXMuX3kgPSAtMTsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8KKyAg
ICB0aGlzLl9jdXJyZW50WWVhciA9IC0xOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVy
fQorICAgICAqLworICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IC0xOworfQorCisvKioKKyAqIEBy
ZXR1cm4geyFib29sZWFufQorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9oYXNTZWxlY3Rpb24g
PSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5feCA+PSAwICYmIHRoaXMuX3kgPj0gMDsK
K30KKworLyoqCisgKiBUaGUgbnVtYmVyIG9mIHdlZWsgbGluZXMgaW4gdGhlIHNjcmVlbi4KKyAq
IEBjb25zdAorICogQHR5cGUge251bWJlcn0KKyAqLworRGF5c1RhYmxlLl9XZWVrcyA9IDY7CisK
Ky8qKgorICogQHBhcmFtIHshRWxlbWVudH0gbWFpbgorICovCitEYXlzVGFibGUucHJvdG90eXBl
LmF0dGFjaFRvID0gZnVuY3Rpb24obWFpbikgeworICAgIHRoaXMuX2RheXNDb250YWluZXIgPSBj
cmVhdGVFbGVtZW50KCJ0YWJsZSIsIENsYXNzTmFtZXMuRGF5c0FyZWEpOworICAgIHRoaXMuX2Rh
eXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZURh
eUNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRM
aXN0ZW5lcigibW91c2VvdmVyIiwgYmluZCh0aGlzLl9oYW5kbGVNb3VzZU92ZXIsIHRoaXMpLCBm
YWxzZSk7CisgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91
dCIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VPdXQsIHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5f
ZGF5c0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJ3ZWJraXRUcmFuc2l0aW9uRW5kIiwgYmlu
ZCh0aGlzLl9tb3ZlSW5EYXlzLCB0aGlzKSwgZmFsc2UpOworICAgIHZhciBjb250YWluZXIgPSBj
cmVhdGVFbGVtZW50KCJ0ciIsIENsYXNzTmFtZXMuRGF5TGFiZWxDb250YWluZXIpOworICAgIHZh
ciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwucGFyYW1zLndlZWtTdGFydERheSB8fCAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgNzsgaSsrKQorICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQo
Y3JlYXRlRWxlbWVudCgidGgiLCBDbGFzc05hbWVzLkRheUxhYmVsLCBnbG9iYWwucGFyYW1zLmRh
eUxhYmVsc1sod2Vla1N0YXJ0RGF5ICsgaSkgJSA3XSkpOworICAgIHRoaXMuX2RheXNDb250YWlu
ZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICB0aGlzLl9kYXlzID0gW107CisgICAgZm9y
ICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKKyAgICAgICAgY29udGFp
bmVyID0gY3JlYXRlRWxlbWVudCgidHIiLCBDbGFzc05hbWVzLldlZWtDb250YWluZXIpOworICAg
ICAgICB2YXIgd2VlayA9IFtdOworICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IDc7IGQrKykg
eworICAgICAgICAgICAgdmFyIGRheSA9IGNyZWF0ZUVsZW1lbnQoInRkIiwgQ2xhc3NOYW1lcy5E
YXksICIgIik7CisgICAgICAgICAgICBkYXkuc2V0QXR0cmlidXRlKCJkYXRhLXBvc2l0aW9uLXgi
LCBTdHJpbmcoZCkpOworICAgICAgICAgICAgZGF5LnNldEF0dHJpYnV0ZSgiZGF0YS1wb3NpdGlv
bi15IiwgU3RyaW5nKHcpKTsKKyAgICAgICAgICAgIHdlZWsucHVzaChkYXkpOworICAgICAgICAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGRheSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5f
ZGF5cy5wdXNoKHdlZWspOworICAgICAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFwcGVuZENoaWxk
KGNvbnRhaW5lcik7CisgICAgfQorICAgIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIs
IENsYXNzTmFtZXMuRGF5c0FyZWFDb250YWluZXIpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGls
ZCh0aGlzLl9kYXlzQ29udGFpbmVyKTsKKyAgICBjb250YWluZXIudGFiSW5kZXggPSAwOworICAg
IGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgYmluZCh0aGlzLl9oYW5kbGVL
ZXksIHRoaXMpLCBmYWxzZSk7CisgICAgbWFpbi5hcHBlbmRDaGlsZChjb250YWluZXIpOworCisg
ICAgY29udGFpbmVyLmZvY3VzKCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gdGlt
ZSBkYXRlIGluIG1pbGxpc2Vjb25kLgorICogQHJldHVybiB7IWJvb2xlYW59CisgKi8KK2Z1bmN0
aW9uIHN0ZXBNaXNtYXRjaCh0aW1lKSB7CisgICAgcmV0dXJuICh0aW1lIC0gZ2xvYmFsLm1pbmlt
dW1EYXRlLmdldFRpbWUoKSkgJSBnbG9iYWwuc3RlcCAhPSAwOworfQorCisvKioKKyAqIEBwYXJh
bSB7IW51bWJlcn0gdGltZSBkYXRlIGluIG1pbGxpc2Vjb25kLgorICogQHJldHVybiB7IWJvb2xl
YW59CisgKi8KK2Z1bmN0aW9uIG91dE9mUmFuZ2UodGltZSkgeworICAgIHJldHVybiB0aW1lIDwg
Z2xvYmFsLm1pbmltdW1EYXRlLmdldFRpbWUoKSB8fCB0aW1lID4gZ2xvYmFsLm1heGltdW1EYXRl
LmdldFRpbWUoKTsKK30KKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHRpbWUgZGF0ZSBpbiBt
aWxsaXNlY29uZC4KKyAqIEByZXR1cm4geyFib29sZWFufQorICovCitmdW5jdGlvbiBpc1ZhbGlk
RGF0ZSh0aW1lKSB7CisgICAgcmV0dXJuICFvdXRPZlJhbmdlKHRpbWUpICYmICFzdGVwTWlzbWF0
Y2godGltZSk7Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0g
eyFudW1iZXJ9IG1vbnRoCisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX3JlbmRlck1vbnRoID0g
ZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICB0aGlzLl9jdXJyZW50WWVhciA9IHllYXI7Cisg
ICAgdGhpcy5fY3VycmVudE1vbnRoID0gbW9udGg7CisgICAgdmFyIGRheUl0ZXJhdG9yID0gbmV3
IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpKTsKKyAgICBkYXlJdGVyYXRvci5zZXRVVENG
dWxsWWVhcih5ZWFyKTsKKyAgICB2YXIgbW9udGhTdGFydERheSA9IGRheUl0ZXJhdG9yLmdldFVU
Q0RheSgpOworICAgIHZhciB3ZWVrU3RhcnREYXkgPSBnbG9iYWwucGFyYW1zLndlZWtTdGFydERh
eSB8fCAwOworICAgIHZhciBzdGFydE9mZnNldCA9IHdlZWtTdGFydERheSAtIG1vbnRoU3RhcnRE
YXk7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IDApCisgICAgICAgIHN0YXJ0T2Zmc2V0IC09IDc7
CisgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShzdGFydE9mZnNldCArIDEpOworICAgIGZvciAo
dmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAgICAgIGZvciAodmFy
IGQgPSAwOyBkIDwgNzsgZCsrKSB7CisgICAgICAgICAgICB2YXIgaXRlclllYXIgPSBkYXlJdGVy
YXRvci5nZXRVVENGdWxsWWVhcigpOworICAgICAgICAgICAgdmFyIGl0ZXJNb250aCA9IGRheUl0
ZXJhdG9yLmdldFVUQ01vbnRoKCk7CisgICAgICAgICAgICB2YXIgdGltZSA9IGRheUl0ZXJhdG9y
LmdldFRpbWUoKTsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fZGF5c1t3XVtkXTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBOZWVkIGxvY2FsaXplZCBudW1iZXI/CisgICAgICAgICAg
ICBlbGVtZW50LmlubmVyVGV4dCA9IFN0cmluZyhkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkpOwor
ICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSBDbGFzc05hbWVzLkRheTsKKyAgICAgICAg
ICAgIGVsZW1lbnQuZGF0YXNldC5zdWJtaXRWYWx1ZSA9IHNlcmlhbGl6ZURhdGUoaXRlclllYXIs
IGl0ZXJNb250aCwgZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKKyAgICAgICAgICAgIGlmIChv
dXRPZlJhbmdlKHRpbWUpKQorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChD
bGFzc05hbWVzLlVuYXZhaWxhYmxlKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0ZXBNaXNtYXRj
aCh0aW1lKSkKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1l
cy5VbmF2YWlsYWJsZSk7CisgICAgICAgICAgICBlbHNlIGlmICgoaXRlclllYXIgPT0geWVhciAm
JiBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpIDwgbW9udGgpIHx8IChtb250aCA9PSAwICYmIGl0
ZXJNb250aCA9PSAxMSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQo
Q2xhc3NOYW1lcy5BdmFpbGFibGUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0
LmFkZChDbGFzc05hbWVzLk5vdFRoaXNNb250aCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKChp
dGVyWWVhciA9PSB5ZWFyICYmIGRheUl0ZXJhdG9yLmdldFVUQ01vbnRoKCkgPiBtb250aCkgfHwg
KG1vbnRoID09IDExICYmIGl0ZXJNb250aCA9PSAwKSkgeworICAgICAgICAgICAgICAgIGVsZW1l
bnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLkF2YWlsYWJsZSk7CisgICAgICAgICAgICAgICAg
ZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuTm90VGhpc01vbnRoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaXNOYU4odGltZSkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50Lmlu
bmVyVGV4dCA9ICItIjsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xh
c3NOYW1lcy5VbmF2YWlsYWJsZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5BdmFpbGFibGUpOworICAgICAgICAg
ICAgZGF5SXRlcmF0b3Iuc2V0VVRDRGF0ZShkYXlJdGVyYXRvci5nZXRVVENEYXRlKCkgKyAxKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGdsb2JhbC50b2RheS5kaXNhYmxlZCA9ICFpc1ZhbGlk
RGF0ZShwYXJzZURhdGVTdHJpbmcoKS5nZXRUaW1lKCkpOworfTsKKworLyoqCisgKiBAcGFyYW0g
eyFudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7IW51bWJlcn0gbW9udGgKKyAqLworRGF5c1RhYmxl
LnByb3RvdHlwZS5fbmF2aWdhdGVUb01vbnRoID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAg
ICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5zZXRZZWFyTW9udGgoeWVhciwgbW9udGgpOwor
ICAgIHRoaXMuX3JlbmRlck1vbnRoKHllYXIsIG1vbnRoKTsKK307CisKKy8qKgorICogQHBhcmFt
IHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKi8KK0RheXNUYWJs
ZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24gPSBmdW5jdGlvbih5ZWFy
LCBtb250aCkgeworICAgIGlmICh0aGlzLl9jdXJyZW50WWVhciA+PSAwICYmIHRoaXMuX2N1cnJl
bnRNb250aCA+PSAwKSB7CisgICAgICAgIGlmICh5ZWFyID09IHRoaXMuX2N1cnJlbnRZZWFyICYm
IG1vbnRoID09IHRoaXMuX2N1cnJlbnRNb250aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdmFyIGRlY3JlYXNpbmcgPSBmYWxzZTsKKyAgICAgICAgaWYgKHllYXIgPCB0aGlzLl9jdXJy
ZW50WWVhcikKKyAgICAgICAgICAgIGRlY3JlYXNpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlm
ICh5ZWFyID4gdGhpcy5fY3VycmVudFllYXIpCisgICAgICAgICAgICBkZWNyZWFzaW5nID0gZmFs
c2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRlY3JlYXNpbmcgPSBtb250aCA8IHRoaXMu
X2N1cnJlbnRNb250aDsKKyAgICAgICAgdmFyIGRheXNTdHlsZSA9IHRoaXMuX2RheXNDb250YWlu
ZXIuc3R5bGU7CisgICAgICAgIGRheXNTdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CisgICAg
ICAgIGRheXNTdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gImxlZnQgMC4xcyBlYXNlIjsKKyAgICAg
ICAgZGF5c1N0eWxlLmxlZnQgPSAoZGVjcmVhc2luZyA/ICIiIDogIi0iKSArIHRoaXMuX2RheXND
b250YWluZXIub2Zmc2V0V2lkdGggKyAicHgiOworICAgIH0KKyAgICB0aGlzLl9uYXZpZ2F0ZVRv
TW9udGgoeWVhciwgbW9udGgpOworfTsKKworRGF5c1RhYmxlLnByb3RvdHlwZS5fbW92ZUluRGF5
cyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBkYXlzU3R5bGUgPSB0aGlzLl9kYXlzQ29udGFpbmVy
LnN0eWxlOworICAgIGlmIChkYXlzU3R5bGUubGVmdCA9PSAiMHB4IikKKyAgICAgICAgcmV0dXJu
OworICAgIGRheXNTdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gIiI7CisgICAgZGF5c1N0eWxlLmxl
ZnQgPSAoZGF5c1N0eWxlLmxlZnQuY2hhckF0KDApID09ICItIiA/ICIiIDogIi0iKSArIHRoaXMu
X2RheXNDb250YWluZXIub2Zmc2V0V2lkdGggKyAicHgiOworICAgIHRoaXMuX2RheXNDb250YWlu
ZXIub2Zmc2V0TGVmdDsgLy8gRm9yY2UgdG8gbGF5b3V0LgorICAgIGRheXNTdHlsZS53ZWJraXRU
cmFuc2l0aW9uID0gImxlZnQgMC4xcyBlYXNlIjsKKyAgICBkYXlzU3R5bGUubGVmdCA9ICIwcHgi
OworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHllYXIKKyAqIEBwYXJhbSB7IW51bWJl
cn0gbW9udGgKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVw
U2VsZWN0aW9uUG9zaXRpb24gPSBmdW5jdGlvbih5ZWFyLCBtb250aCkgeworICAgIGlmICh5ZWFy
ID09IHRoaXMuX2N1cnJlbnRZZWFyICYmIG1vbnRoID09IHRoaXMuX2N1cnJlbnRNb250aCkKKyAg
ICAgICAgcmV0dXJuOworICAgIHRoaXMuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24oeWVh
ciwgbW9udGgpOworICAgIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSkKKyAgICAgICAgdGhpcy5f
ZGF5c1t0aGlzLl95XVt0aGlzLl94XS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQp
OworfTsKKworLyoqCisgKiBAcGFyYW0geyFEYXRlfSBkYXRlCisgKi8KK0RheXNUYWJsZS5wcm90
b3R5cGUuc2VsZWN0RGF0ZSA9IGZ1bmN0aW9uKGRhdGUpIHsKKyAgICB0aGlzLl9uYXZpZ2F0ZVRv
TW9udGhXaXRoQW5pbWF0aW9uKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250
aCgpKTsKKyAgICB2YXIgZGF0ZVN0cmluZyA9IHNlcmlhbGl6ZURhdGUoZGF0ZS5nZXRVVENGdWxs
WWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0VVRDRGF0ZSgpKTsKKyAgICBmb3Ig
KHZhciB3ID0gMDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgeworICAgICAgICBmb3IgKHZh
ciBkID0gMDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAgaWYgKHRoaXMuX2RheXNbd11bZF0u
ZGF0YXNldC5zdWJtaXRWYWx1ZSA9PSBkYXRlU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5fZGF5c1t3XVtkXS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgICAg
ICAgICAgICAgIHRoaXMuX3ggPSBkOworICAgICAgICAgICAgICAgIHRoaXMuX3kgPSB3OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsK
KworLyoqCisgKiBAcmV0dXJuIHshYm9vbGVhbn0KKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5f
bWF5YmVTZXRQcmV2aW91c01vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHllYXIgPSBnbG9i
YWwueWVhck1vbnRoQ29udHJvbGxlci55ZWFyKCk7CisgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnll
YXJNb250aENvbnRyb2xsZXIubW9udGgoKTsKKyAgICB2YXIgdGhpc01vbnRoU3RhcnRUaW1lID0g
RGF0ZS5VVEMoeWVhciwgbW9udGgsIDEpOworICAgIGlmIChnbG9iYWwubWluaW11bURhdGUuZ2V0
VGltZSgpID49IHRoaXNNb250aFN0YXJ0VGltZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtb250aCA9PSAwKSB7CisgICAgICAgIHllYXItLTsKKyAgICAgICAgbW9udGggPSAxMTsK
KyAgICB9IGVsc2UKKyAgICAgICAgbW9udGgtLTsKKyAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhX
aXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKgor
ICogQHJldHVybiB7IWJvb2xlYW59CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX21heWJlU2V0
TmV4dE1vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgdmFyIHllYXIgPSBnbG9iYWwueWVhck1vbnRo
Q29udHJvbGxlci55ZWFyKCk7CisgICAgdmFyIG1vbnRoID0gZ2xvYmFsLnllYXJNb250aENvbnRy
b2xsZXIubW9udGgoKTsKKyAgICBpZiAobW9udGggPT0gMTEpIHsKKyAgICAgICAgeWVhcisrOwor
ICAgICAgICBtb250aCA9IDA7CisgICAgfSBlbHNlCisgICAgICAgIG1vbnRoKys7CisgICAgdmFy
IG5leHRNb250aFN0YXJ0VGltZSA9IERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKKyAgICBpZiAo
Z2xvYmFsLm1heGltdW1EYXRlLmdldFRpbWUoKSA8IG5leHRNb250aFN0YXJ0VGltZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHRoaXMuX25hdmlnYXRlVG9Nb250aFdpdGhBbmltYXRpb24o
eWVhciwgbW9udGgpOworICAgIHJldHVybiB0cnVlOworfTsKKworLyoqCisgKiBAcGFyYW0ge0V2
ZW50fSBldmVudAorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVEYXlDbGljayA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMo
Q2xhc3NOYW1lcy5BdmFpbGFibGUpKQorICAgICAgICBzdWJtaXRWYWx1ZShldmVudC50YXJnZXQu
ZGF0YXNldC5zdWJtaXRWYWx1ZSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50
CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZU1vdXNlT3ZlciA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgdmFyIG5vZGUgPSBldmVudC50YXJnZXQ7CisgICAgaWYgKHRoaXMuX2hhc1Nl
bGVjdGlvbigpKQorICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNsYXNzTGlz
dC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgaWYgKCFub2RlLmNsYXNzTGlzdC5j
b250YWlucyhDbGFzc05hbWVzLkRheSkpIHsKKyAgICAgICAgdGhpcy5feCA9IC0xOworICAgICAg
ICB0aGlzLl95ID0gLTE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbm9kZS5jbGFzc0xp
c3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgIHRoaXMuX3ggPSBOdW1iZXIobm9kZS5k
YXRhc2V0LnBvc2l0aW9uWCk7CisgICAgdGhpcy5feSA9IE51bWJlcihub2RlLmRhdGFzZXQucG9z
aXRpb25ZKTsKK307CisKKy8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqLworRGF5c1Rh
YmxlLnByb3RvdHlwZS5faGFuZGxlTW91c2VPdXQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlm
ICh0aGlzLl9oYXNTZWxlY3Rpb24oKSkKKyAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlz
Ll94XS5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgIHRoaXMuX3gg
PSAtMTsKKyAgICB0aGlzLl95ID0gLTE7Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2
ZW50CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZUtleSA9IGZ1bmN0aW9uKGV2ZW50
KSB7CisgICAgbWF5YmVVcGRhdGVGb2N1c1N0eWxlKCk7CisgICAgdmFyIHggPSB0aGlzLl94Owor
ICAgIHZhciB5ID0gdGhpcy5feTsKKyAgICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsK
KyAgICBpZiAoIXRoaXMuX2hhc1NlbGVjdGlvbigpICYmIChrZXkgPT0gIkxlZnQiIHx8IGtleSA9
PSAiVXAiIHx8IGtleSA9PSAiUmlnaHQiIHx8IGtleSA9PSAiRG93biIpKSB7CisgICAgICAgIC8v
IFB1dCB0aGUgc2VsZWN0aW9uIG9uIGEgY2VudGVyIGNlbGwuCisgICAgICAgIHRoaXMudXBkYXRl
U2VsZWN0aW9uKGV2ZW50LCAzLCBNYXRoLmZsb29yKERheXNUYWJsZS5fV2Vla3MgLyAyIC0gMSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGtleSA9PSAiTGVmdCIpIHsKKyAg
ICAgICAgaWYgKHggPT0gMCkgeworICAgICAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAg
ICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXRQcmV2aW91c01vbnRoKCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB5ID0gRGF5c1RhYmxlLl9XZWVrcyAtIDE7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICB5LS07CisgICAgICAgICAgICB4
ID0gNjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4LS07CisgICAgICAgIHRoaXMudXBk
YXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKworICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVcCIp
IHsKKyAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNl
dFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB5
ID0gRGF5c1RhYmxlLl9XZWVrcyAtIDE7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeS0t
OworICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisKKyAgICB9IGVs
c2UgaWYgKGtleSA9PSAiUmlnaHQiKSB7CisgICAgICAgIGlmICh4ID09IDYpIHsKKyAgICAgICAg
ICAgIGlmICh5ID09IERheXNUYWJsZS5fV2Vla3MgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYg
KCF0aGlzLl9tYXliZVNldE5leHRNb250aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgeSA9IDA7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICB5Kys7CisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICB4Kys7CisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKworICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJEb3duIikgeworICAgICAgICBpZiAoeSA9PSBEYXlzVGFibGUu
X1dlZWtzIC0gMSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldE5leHRNb250aCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHkgPSAwOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIHkrKzsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZl
bnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlBhZ2VVcCIpIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNl
IGlmIChrZXkgPT0gIlBhZ2VEb3duIikgeworICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4
dE1vbnRoKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0
aW9uKGV2ZW50LCB4LCB5KTsKKworICAgIH0gZWxzZSBpZiAodGhpcy5faGFzU2VsZWN0aW9uKCkg
JiYga2V5ID09ICJFbnRlciIpIHsKKyAgICAgICAgdmFyIGRheU5vZGUgPSB0aGlzLl9kYXlzW3ld
W3hdOworICAgICAgICBpZiAoZGF5Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lcy5B
dmFpbGFibGUpKSB7CisgICAgICAgICAgICBzdWJtaXRWYWx1ZShkYXlOb2RlLmRhdGFzZXQuc3Vi
bWl0VmFsdWUpOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAg
IH0KKworICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTQiKSB7IC8vICd0JworICAgICAgICB0
aGlzLl9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5T
ZWxlY3RlZCk7CisgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShuZXcgRGF0ZSgpKTsKKyAgICAgICAg
ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CisgICAgfQorfTsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICogQHBhcmFtIHsh
bnVtYmVyfSB4CisgKiBAcGFyYW0geyFudW1iZXJ9IHkKKyAqLworRGF5c1RhYmxlLnByb3RvdHlw
ZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihldmVudCwgeCwgeSkgeworICAgIGlmICh0aGlz
Ll9oYXNTZWxlY3Rpb24oKSkKKyAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlzLl94XS5j
bGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgIGlmICh4ID49IDAgJiYg
eSA+PSAwKSB7CisgICAgICAgIHRoaXMuX2RheXNbeV1beF0uY2xhc3NMaXN0LmFkZChDbGFzc05h
bWVzLlNlbGVjdGVkKTsKKyAgICAgICAgdGhpcy5feCA9IHg7CisgICAgICAgIHRoaXMuX3kgPSB5
OworICAgIH0KKyAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOworfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitmdW5jdGlvbiBoYW5kbGVUb2RheSgpIHsK
KyAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CisgICAgZ2xvYmFsLmRheXNUYWJsZS5zZWxlY3RE
YXRlKGRhdGUpOworICAgIHN1Ym1pdFZhbHVlKHNlcmlhbGl6ZURhdGUoZGF0ZS5nZXRGdWxsWWVh
cigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSk7Cit9CisKK2Z1bmN0aW9uIGhh
bmRsZUNsZWFyKCkgeworICAgIHN1Ym1pdFZhbHVlKCIiKTsKK30KKworLyoqCisgKiBAcGFyYW0g
e3N0cmluZ30gdmFsdWUKKyAqLworZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKKyAgICB3
aW5kb3cuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKDAsIHZhbHVlKTsKK30KKworZnVuY3Rpb24gaGFu
ZGxlQ2FuY2VsKCkgeworICAgIHdpbmRvdy5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICIiKTsK
K30KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVH
bG9iYWxLZXkoZXZlbnQpIHsKKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICB2YXIg
a2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7Cisg
ICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBn
bG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAg
ICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgfSBlbHNl
IGlmIChldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2JhbC5m
aXJzdEZvY3VzYWJsZUNvbnRyb2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIGds
b2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbC5mb2N1cygpOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmIChrZXkgPT0gIlUrMDA0RCIpIHsgLy8gJ20nCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhD
b250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJv
bGxlci5QcmV2aW91c01vbnRoIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOworICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTkiKSB7IC8vICd5JworICAgICAgICBnbG9iYWwueWVh
ck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250
aENvbnRyb2xsZXIuUHJldmlvdXNZZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7
CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0NCIpIHsgLy8gJ2QnCisgICAgICAgIGdsb2Jh
bC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVh
ck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzIDogWWVhck1vbnRoQ29udHJvbGxlci5O
ZXh0VGVuWWVhcnMpOworICAgIH0KK30KKworZnVuY3Rpb24gbWF5YmVVcGRhdGVGb2N1c1N0eWxl
KCkgeworICAgIGlmIChnbG9iYWwuaGFkS2V5RXZlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBn
bG9iYWwuaGFkS2V5RXZlbnQgPSB0cnVlOworICAgICQoIm1haW4iKS5jbGFzc0xpc3QucmVtb3Zl
KENsYXNzTmFtZXMuTm9Gb2N1c1JpbmcpOworfQorCitpZiAod2luZG93LmRpYWxvZ0FyZ3VtZW50
cykgeworICAgIGluaXRpYWxpemUoZGlhbG9nQXJndW1lbnRzKTsKK30gZWxzZSB7CisgICAgd2lu
ZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBoYW5kbGVNZXNzYWdlLCBmYWxzZSk7Cisg
ICAgd2luZG93LnNldFRpbWVvdXQoaGFuZGxlQXJndW1lbnRzVGltZW91dCwgMTAwMCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGMxZDk3NTc3NjRhNGRiMGMz
MmJmNWFjZTA0Y2Y4MTYwZmFiZWExNDAuLjRkYzE5MDkyZmEwZmJjNGUxNDc3NTc0NTJhMzE5ZWMw
MmM2NGM1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUu
Z3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC04NDEs
NiArODQxLDI1IEBACiAgICAgICAgICAgXSwKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAg
ICAgICdhY3Rpb25fbmFtZSc6ICdDYWxlbmRhclBpY2tlcicsCisgICAgICAgICAgJ2lucHV0cyc6
IFsKKyAgICAgICAgICAgICcuLi9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzJywKKyAgICAg
ICAgICAgICcuLi9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMnLAorICAgICAgICAgIF0sCisg
ICAgICAgICAgJ291dHB1dHMnOiBbCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5jcHAnLAorICAgICAgICAgIF0s
CisgICAgICAgICAgJ2FjdGlvbic6IFsKKyAgICAgICAgICAgICdweXRob24nLAorICAgICAgICAg
ICAgJy4uL21ha2UtZmlsZS1hcnJheXMucHknLAorICAgICAgICAgICAgJy0tY29uZGl0aW9uPUVO
QUJMRShDQUxFTkRBUl9QSUNLRVIpJywKKyAgICAgICAgICAgICctLW91dC1oPTwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRhclBpY2tlci5oJywKKyAgICAgICAgICAgICct
LW91dC1jcHA9PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2Vy
LmNwcCcsCisgICAgICAgICAgICAnPEAoX2lucHV0cyknLAorICAgICAgICAgIF0sCisgICAgICAg
IH0sCisgICAgICAgIHsKICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnWExpbmtOYW1lcycsCiAg
ICAgICAgICAgJ2lucHV0cyc6IFsKICAgICAgICAgICAgICcuLi9kb20vbWFrZV9uYW1lcy5wbCcs
CkBAIC0xMDc3LDYgKzEwOTYsNyBAQAogICAgICAgICAjIEFkZGl0aW9uYWwgLmNwcCBmaWxlcyBm
cm9tIHdlYmNvcmVfYmluZGluZ3Nfc291cmNlcyBhY3Rpb25zLgogICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0L0hUTUxFbGVtZW50RmFjdG9yeS5jcHAnLAogICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0hUTUxOYW1lcy5jcHAnLAorICAg
ICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0NhbGVuZGFyUGlja2VyLmNw
cCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvRXZlbnRGYWN0
b3J5LmNwcCcsCiAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvRXZl
bnRIZWFkZXJzLmgnLAogICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0
L0V2ZW50SW50ZXJmYWNlcy5oJywKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwpp
bmRleCAxZDFkZTJiMmQ4NjVlYjBiZTRiMTExYmZhNTQyMGVmNzM1ZGQ2NjhlLi44MjgwYTVmNmU5
NDdiMThmODM2MjkwZjQ3YzdiMjVjYjAxMWIyNTlkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysr
IGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDQtMDQgIEtlbnQgVGFtdXJhICA8
dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEFkZCBKYXZhU2NyaXB0IGFuZCBDU1MgY29k
ZSBmb3IgdGhlIGNhbGVuZGFyIHBpY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMwMTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL2Zvcm1zL2NhbGVu
ZGFyLXBpY2tlci5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0wMyAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIHJlbW92ZSBXZWJLaXQgZmlsZXMgZnJvbSAuZ2l0YXR0
cmlidXRlcwpkaWZmIC0tZ2l0IGEvTWFudWFsVGVzdHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0
bWwgYi9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NDI1ZTg4OTZkMjAyZjVjMjgxMTdhMWRhODcwMzA4NThhYjNhOWI0Ci0tLSAvZGV2L251bGwKKysr
IGIvTWFudWFsVGVzdHMvZm9ybXMvY2FsZW5kYXItcGlja2VyLmh0bWwKQEAgLTAsMCArMSw4MiBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD11dGYtOD4K
Kzx0aXRsZT5DYWxlbmRhciBQaWNrZXIgdGVzdDwvdGl0bGU+Cis8c3R5bGU+Citib2R5IHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVmZmZmOworfQoraWZyYW1lIHsKKyAgICB6LWluZGV4OiAy
MTQ3NDgzNjQ3OworICAgIHdpZHRoOiAyOTBweDsKKyAgICBoZWlnaHQ6IDI1NnB4OworICAgIGJv
cmRlcjogMDsKKyAgICBvdmVyZmxvdzogaGlkZGVuOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorCis8cD5UaGlzIGlzIGEgdGVzdGJlZCBmb3IgYSBjYWxlbmRhciBwaWNrZXIuPC9wPgor
Cis8ZGl2PjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZGF0ZSI+PC9kaXY+Cis8aWZyYW1lPjwvaWZy
YW1lPgorCis8b2wgaWQ9ImNvbnNvbGUiIHN0eWxlPSJmb250LWZhbWlseTptb25vc3BhY2U7Ij4K
Kzwvb2w+CisKKzxzY3JpcHQ+Cit2YXIgZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgnaWZyYW1lJylbMF07Cit2YXIgZG9jID0gZnJhbWUuY29udGVudERvY3VtZW50OworZG9j
LmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwgPSAnPGhlYWQ+PC9oZWFkPjxib2R5PjxkaXYgaWQ9
bWFpbj5Mb2FkaW5nLi4uPC9kaXY+PC9ib2R5Pic7Cit2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVt
ZW50KCdsaW5rJyk7CitsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JzsKK2xpbmsuaHJlZiA9ICcuLi8u
Li9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3NzPycgKyAobmV3IERh
dGUoKSkuZ2V0VGltZSgpOworZG9jLmhlYWQuYXBwZW5kQ2hpbGQobGluayk7Cit2YXIgc2NyaXB0
ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOworc2NyaXB0LnNyYyA9ICcuLi8uLi9Tb3Vy
Y2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanM/JyArIChuZXcgRGF0ZSgpKS5n
ZXRUaW1lKCk7Citkb2MuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpOworCit2YXIgZW5nbGlzaEFy
Z3VtZW50cyA9IHsKKyAgICBsb2NhbGU6ICdlbi1VUycsCisgICAgbW9udGhMYWJlbHMgOiBbJ0ph
bnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLAorICAg
ICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdE
ZWNlbWJlciddLAorICAgIGRheUxhYmVscyA6IFsnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywg
J1RodScsICdGcmknLCAnU2F0J10sCisgICAgdG9kYXlMYWJlbCA6ICdUb2RheScsCisgICAgY2xl
YXJMYWJlbCA6ICdDbGVhcicsCisgICAgY2FuY2VsTGFiZWwgOiAnQ2FuY2VsJywKKyAgICB3ZWVr
U3RhcnREYXkgOiAwLAorICAgIHN0ZXAgOiAxLAorICAgIG1heCA6ICcyMDk5LTEyLTMxJywKK307
Cit2YXIgamFwYW5lc2VBcmd1bWVudHMgPSB7CisgICAgbG9jYWxlOiAnamEtSlAnLAorICAgIG1v
bnRoTGFiZWxzIDogWycx5pyIJywgJzLmnIgnLCAnM+aciCcsICc05pyIJywgJzXmnIgnLCAnNuac
iCcsCisgICAgJzfmnIgnLCAnOOaciCcsICc55pyIJywgJzEw5pyIJywgJzEx5pyIJywgJzEy5pyI
J10sCisgICAgZGF5TGFiZWxzIDogWyfml6UnLCAn5pyIJywgJ+eBqycsICfmsLQnLCAn5pyoJywg
J+mHkScsICflnJ8nXSwKKyAgICB0b2RheUxhYmVsIDogJ+S7iuaXpScsCisgICAgY2xlYXJMYWJl
bCA6ICfjgq/jg6rjgqInLAorICAgIGNhbmNlbExhYmVsIDogJ+WPluOCiua2iOOBlycsCisgICAg
d2Vla1N0YXJ0RGF5IDogMCwKKyAgICBzdGVwIDogMSwKKyAgICBtYXggOiAnMjA5OS0wMy0xNScs
Cit9Oworc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICBmcmFtZS5jb250ZW50V2luZG93LnBv
c3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KGVuZ2xpc2hBcmd1bWVudHMpLCAiKiIpOworICAgIGZy
YW1lLmNvbnRlbnRXaW5kb3cuc2V0VmFsdWVBbmRDbG9zZVBvcHVwID0gZnVuY3Rpb24obnVtVmFs
dWUsIHN0cmluZ1ZhbHVlKSB7CisgICAgICAgIHdpbmRvdy5sb2coJ251bWJlcj0nICsgbnVtVmFs
dWUgKyAnLCBzdHJpbmc9IicgKyBzdHJpbmdWYWx1ZSArICciJyk7CisgICAgICAgIGlmIChudW1W
YWx1ZSA9PSAwKQorICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdk
YXRlJykudmFsdWUgPSBzdHJpbmdWYWx1ZTsKKyAgICB9OworfSwgMTAwKTsKKworCitmdW5jdGlv
biBsb2coc3RyKSB7CisgICAgdmFyIGVudHJ5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGkn
KTsKKyAgICBlbnRyeS5pbm5lclRleHQgPSBzdHI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChlbnRyeSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4K
</data>
<flag name="review"
          id="140373"
          type_id="1"
          status="+"
          setter="morrita"
    />
          </attachment>
      

    </bug>

</bugzilla>