To the Guggenheim Board of Directors:

With reference to the upcoming art exhibition organized by Celeste and Valentino, three proposals were examined with respect to the several requirements both curators detailed (as seen below).

The first proposal sought to maximize the floor space while remaining with the 4 million budget allotted to this exhibition. This resulted in a total of 15 art pieces being shown at a total cost of 3,950,000. The second

The second proposal sought to minimize costs with a minimum of 20 piece shown. To minimize the 4 million dollar budget 20 pieces were selected at a total cost of 5,400,000. It is clear that the 4 million budget would not be enough to meet this new minimum.

The third proposal pertains to cost fluctuations of 20% above or below the current costs set, while maintain the same goals as proposal two. Running a simulation, resulted in a potential final average cost of 5,320,949. This amount sits between a minimum average cost of 4,811,615.30 and maximum average cost of 5,913,777.60. This average cost is 79,050 below the cost calculated in the previous proposal.

A list of the art pieces that would be shown and not be shown sit below with the listed requirement of Valentino and Celeste.

Valentino possesses certain requirements for the exhibit.

  • He therefore decides to include only one collage.
  • He therefore wants at least one wire mesh sculpture displayed if a computer-generated drawing is displayed.
    • Alternatively, he wants at least one computer-generated drawing displayed if a wire mesh sculpture is displayed.
  • He therefore decides to include:
    • at least one photo-realistic painting,
    • at least one cubist painting,
    • at least one expressionist painting,
    • at least one watercolor painting, and
    • at least one oil painting.
    • At the same time, he wants the number of paintings to be no greater than three times the number of other art forms.
  • Valentino wants all his own paintings included in the exhibit.
  • Helen, and he wants both of her paintings displayed.
  • He therefore decides to display as many pieces from David as from Enrique and to display at least one piece from each of them.
  • Valentino will therefore only accept one display piece from Rick, if any at all.

Celeste also possesses her own agenda for the exhibit.

  • To support female artists, she decides to include at least one piece from a female artist for every three pieces included from a male artist.
  • To advance environmentalism, she decides to include either one or both of the pieces “Aging Earth” and “Wasted Resources.”
  • To advance Native American rights, she decides to include at least one piece by Stuart.
  • To advance science, she decides to include at least one of the following pieces: “Beyond,” “Who Has Control,” “Where are we now?” and “Pioneers.”
  • For this exhibit, the museum only has enough floor space:
    • for four sculptures
    • enough wall space for around 20 paintings, collages, and drawings.
  • if “Narcissism” is displayed, “Reflection” should also be displayed since “Reflection” also suggests narcissism.

Proposal 1

The Guggenheim decides to allocate $4 million to fund the exhibit. Given the pieces available and the specific requirements from Valentino and Celeste, formulate and solve a BIP model to maximize the number of pieces displayed in the exhibit without exceeding the budget. How many pieces are displayed? Which pieces are displayed?

15 ought to be displayed while maximizing floor space while remaining with a 4 million budget.

TABLE 1: Proposal 1–Planned Display Pieces
TABLE 2: Proposal 1–Pieces Not Procured for Display

The total spent to display 15 pieces is 3950000 leaving 50000. Thus around 98.75% of the budget has been allocated and utilized.

Proposal 2

To ensure that the exhibit draws the attention of the public, Celeste decides that it must include at least 20 pieces. Formulate and solve a BIP model to minimize the cost of the exhibit while displaying at least 20 pieces and meeting the requirements set by Valentino and Celeste. How much does the exhibit cost? Which pieces should be displayed?

20 total can be displayed while minimizing with with at least 20 pieces displayed.

The cost of displaying 20 pieces will be $5400000

TABLE 3: Proposal 2–Planned Display Pieces
TABLE 4: Proposal 2–Pieces Not Procured for Display

Proposal 3

Apparently Valentino and Celeste were using an old pricing sheet when they made their exhibit decisions. They still want to maintain the same criteria, but realize the cost of each piece of art could increase or decrease by as much as 20% of the cost on the old price sheet. That is, the random price change of each piece can range between –20% and +20% independently with equal probability. How does that possibility impact the cost of Celeste’s plan in part 2?
TABLE 5: Simulation Results and Comparision
Results from simulation
Simulation Proposal 2 Difference Percentage Change
mean 5320949.4 5400000 -79050 -1.464
sd 156457.3 1 1 1.000
max 5913777.6 5400000 513800 9.514
min 4811615.3 5400000 -588400 -10.900
GRAPH 1: Bar Chart of Cost Distribution

TABLE 6: Individal Cost Variance
Piece ID Piece Name Orginal Price Simulation Mean Simulation SD Min Max
1 Perfection 300000 300873 34945 240041 359916
2 Burden 250000 248629 28165 200183 299690
3 Emergence 125000 125588 14301 100085 149938
4 Beyond 400000 399359 46403 320144 479877
5 Who Has Control? 500000 501167 58468 400197 599749
6 Domestication 400000 399742 45513 320399 479935
7 Innocence 550000 551880 63466 440258 659244
8 Aging Earth 700000 698144 79564 560179 839747
9 Wasted Resources 575000 575266 65440 460255 689129
10 Serenity 125000 124726 14387 100229 149826
11 Calm Before the Storm 300000 301897 34035 240263 359978
12 Void 150000 150169 17101 120087 179906
13 Sun 150000 149504 17582 120092 179982
14 Storefront Window 850000 855013 96422 680233 1019636
15 Harley 750000 755934 85060 600227 899955
16 Consumerism 400000 398544 45646 320129 479767
17 Reflection 175000 175935 19961 140051 209970
18 Trojan Victory 450000 449968 52721 360130 539929
19 Ziggy 500000 501794 57890 400085 599910
20 Ziggy II 500000 497554 56762 400208 599995
21 Ziggy III 500000 500505 58339 400075 599482
22 Where are we now? 650000 654664 75544 520304 779787
23 Pioneers 650000 652251 74980 520262 779895
24 Wisdom 250000 251134 28696 200122 299808
25 Superior Powers 350000 350019 41151 280004 419887
26 Living Land 450000 449216 51542 360475 539973
27 Study of a Violin 400000 399187 46363 320015 479951
28 Study of a Fruit Bowl 400000 401504 45680 320138 479930
29 My Namesake 300000 301305 34851 240195 359921
30 Narcissism 300000 299179 33961 240155 359974
31 All That Glitters 50000 49799 5808 40018 59960
32 The Rock 50000 49806 5793 40007 59988
33 Winding Road 50000 49888 5768 40004 59921
34 1071 Fifth Ave 50000 49791 5734 40060 59959
TABLE 7: Proposal 3–Planned Display Pieces
TABLE 8: Proposal 3–Pieces Not Procured for Display
LS0tDQp0aXRsZTogIlBhcnQgSSBGaW5hbCBQcm9qZWN0LS1HdWdnZW5oaWVtIE1lbW8iDQphdXRob3I6ICJFbWlseSBUZW5ueXNvbiINCmFsd2F5c19hbGxvd19odG1sOiB5ZXMNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgdG9jX2RlcHRoOiA0DQotLS0NCg0KPHN0eWxlPg0KYm9keSB7DQp0ZXh0LWFsaWduOiBqdXN0aWZ5fQ0KPC9zdHlsZT4NCg0KYGBge3IgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gImhpZGUiLCBpbmNsdWRlID0gVFJVRX0NCiMgQ2xlYXIgZW52aXJvbm1lbnQgb2YgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMNCnJtKGxpc3QgPSBscyhhbGwgPSBUUlVFKSkgDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkobHBTb2x2ZUFQSSkNCmAlPiVgIDwtIG1hZ3JpdHRyOjpgJT4lYA0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmBgYA0KDQoNCmBgYHtyIGVjaG8gPSBGQUxTRSwgcmVzdWx0cyA9ICJoaWRlIiwgaW5jbHVkZSA9IEZBTFNFfQ0KZGF0YV9yYXcgPC0gcmVhZC5jc3YoIkRhdGEuY3N2IiwgaGVhZGVyID0gVFJVRSkNCg0KZGF0YV9yYXcgPC0gdGliYmxlOjpyb3dpZF90b19jb2x1bW4oZGF0YV9yYXcsICJJRCIpDQoNCmRhdGFfcmF3DQoNCmBgYA0KDQoNClRvIHRoZSBHdWdnZW5oZWltIEJvYXJkIG9mIERpcmVjdG9yczoNCg0KV2l0aCByZWZlcmVuY2UgdG8gdGhlIHVwY29taW5nIGFydCBleGhpYml0aW9uIG9yZ2FuaXplZCBieSBDZWxlc3RlIGFuZCBWYWxlbnRpbm8sIHRocmVlIHByb3Bvc2FscyB3ZXJlIGV4YW1pbmVkIHdpdGggcmVzcGVjdCB0byB0aGUgc2V2ZXJhbCByZXF1aXJlbWVudHMgYm90aCBjdXJhdG9ycyBkZXRhaWxlZCAoYXMgc2VlbiBiZWxvdykuIA0KDQpUaGUgZmlyc3QgcHJvcG9zYWwgc291Z2h0IHRvIG1heGltaXplIHRoZSBmbG9vciBzcGFjZSB3aGlsZSByZW1haW5pbmcgd2l0aCB0aGUgNCBtaWxsaW9uIGJ1ZGdldCBhbGxvdHRlZCB0byB0aGlzIGV4aGliaXRpb24uIFRoaXMgcmVzdWx0ZWQgaW4gYSB0b3RhbCBvZiAxNSBhcnQgcGllY2VzIGJlaW5nIHNob3duIGF0IGEgdG90YWwgY29zdCBvZiAzLDk1MCwwMDAuIFRoZSBzZWNvbmQgDQoNClRoZSBzZWNvbmQgcHJvcG9zYWwgc291Z2h0IHRvIG1pbmltaXplIGNvc3RzIHdpdGggYSBtaW5pbXVtIG9mIDIwIHBpZWNlIHNob3duLiBUbyBtaW5pbWl6ZSB0aGUgNCBtaWxsaW9uIGRvbGxhciBidWRnZXQgMjAgcGllY2VzIHdlcmUgc2VsZWN0ZWQgYXQgYSB0b3RhbCBjb3N0IG9mIDUsNDAwLDAwMC4gSXQgaXMgY2xlYXIgdGhhdCB0aGUgNCBtaWxsaW9uIGJ1ZGdldCB3b3VsZCBub3QgYmUgZW5vdWdoIHRvIG1lZXQgdGhpcyBuZXcgbWluaW11bS4NCg0KVGhlIHRoaXJkIHByb3Bvc2FsIHBlcnRhaW5zIHRvIGNvc3QgZmx1Y3R1YXRpb25zIG9mIDIwJSBhYm92ZSBvciBiZWxvdyB0aGUgY3VycmVudCBjb3N0cyBzZXQsIHdoaWxlIG1haW50YWluIHRoZSBzYW1lIGdvYWxzIGFzIHByb3Bvc2FsIHR3by4gUnVubmluZyBhIHNpbXVsYXRpb24sIHJlc3VsdGVkIGluIGEgcG90ZW50aWFsIGZpbmFsIGF2ZXJhZ2UgY29zdCBvZiA1LDMyMCw5NDkuIFRoaXMgYW1vdW50IHNpdHMgYmV0d2VlbiBhIG1pbmltdW0gYXZlcmFnZSBjb3N0IG9mIDQsODExLDYxNS4zMCBhbmQgbWF4aW11bSBhdmVyYWdlIGNvc3Qgb2YgNSw5MTMsNzc3LjYwLiBUaGlzIGF2ZXJhZ2UgY29zdCBpcyA3OSwwNTAgYmVsb3cgdGhlIGNvc3QgY2FsY3VsYXRlZCBpbiB0aGUgcHJldmlvdXMgcHJvcG9zYWwuIA0KDQpBIGxpc3Qgb2YgdGhlIGFydCBwaWVjZXMgdGhhdCB3b3VsZCBiZSBzaG93biBhbmQgbm90IGJlIHNob3duIHNpdCBiZWxvdyB3aXRoIHRoZSBsaXN0ZWQgcmVxdWlyZW1lbnQgb2YgVmFsZW50aW5vIGFuZCBDZWxlc3RlLg0KDQoNCiMjIyBWYWxlbnRpbm8gcG9zc2Vzc2VzIGNlcnRhaW4gcmVxdWlyZW1lbnRzIGZvciB0aGUgZXhoaWJpdC4gDQoNCisgSGUgdGhlcmVmb3JlIGRlY2lkZXMgdG8gaW5jbHVkZSBvbmx5IG9uZSBjb2xsYWdlLg0KKyBIZSB0aGVyZWZvcmUgd2FudHMgYXQgbGVhc3Qgb25lIHdpcmUgbWVzaCBzY3VscHR1cmUgZGlzcGxheWVkIGlmIGEgY29tcHV0ZXItZ2VuZXJhdGVkIGRyYXdpbmcgaXMgZGlzcGxheWVkLiANCiAgLSBBbHRlcm5hdGl2ZWx5LCBoZSB3YW50cyBhdCBsZWFzdCBvbmUgY29tcHV0ZXItZ2VuZXJhdGVkIGRyYXdpbmcgZGlzcGxheWVkIGlmIGEgd2lyZSBtZXNoIHNjdWxwdHVyZSBpcyBkaXNwbGF5ZWQuIA0KKyBIZSB0aGVyZWZvcmUgZGVjaWRlcyB0byBpbmNsdWRlOg0KICAtIGF0IGxlYXN0IG9uZSBwaG90by1yZWFsaXN0aWMgcGFpbnRpbmcsIA0KICAtIGF0IGxlYXN0IG9uZSBjdWJpc3QgcGFpbnRpbmcsIA0KICAtIGF0IGxlYXN0IG9uZSBleHByZXNzaW9uaXN0IHBhaW50aW5nLCANCiAgLSBhdCBsZWFzdCBvbmUgd2F0ZXJjb2xvciBwYWludGluZywgYW5kIA0KICAtIGF0IGxlYXN0IG9uZSBvaWwgcGFpbnRpbmcuIA0KICArIEF0IHRoZSBzYW1lIHRpbWUsIGhlIHdhbnRzIHRoZSBudW1iZXIgb2YgcGFpbnRpbmdzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aHJlZSB0aW1lcyB0aGUgbnVtYmVyIG9mIG90aGVyIGFydCBmb3Jtcy4NCisgVmFsZW50aW5vIHdhbnRzIGFsbCBoaXMgb3duIHBhaW50aW5ncyBpbmNsdWRlZCBpbiB0aGUgZXhoaWJpdC4gDQorIEhlbGVuLCBhbmQgaGUgd2FudHMgYm90aCBvZiBoZXIgcGFpbnRpbmdzIGRpc3BsYXllZC4gDQorIEhlIHRoZXJlZm9yZSBkZWNpZGVzIHRvIGRpc3BsYXkgYXMgbWFueSBwaWVjZXMgZnJvbSBEYXZpZCBhcyBmcm9tIEVucmlxdWUgYW5kIHRvIGRpc3BsYXkgYXQgbGVhc3Qgb25lIHBpZWNlIGZyb20gZWFjaCBvZiB0aGVtLg0KKyBWYWxlbnRpbm8gd2lsbCB0aGVyZWZvcmUgb25seSBhY2NlcHQgb25lIGRpc3BsYXkgcGllY2UgZnJvbSBSaWNrLCBpZiBhbnkgYXQgYWxsLiANCg0KIyMjIENlbGVzdGUgYWxzbyBwb3NzZXNzZXMgaGVyIG93biBhZ2VuZGEgZm9yIHRoZSBleGhpYml0LiANCisgVG8gc3VwcG9ydCBmZW1hbGUgYXJ0aXN0cywgc2hlIGRlY2lkZXMgdG8gaW5jbHVkZSBhdCBsZWFzdCBvbmUgcGllY2UgZnJvbSBhIGZlbWFsZSBhcnRpc3QgZm9yIGV2ZXJ5IHRocmVlIHBpZWNlcyBpbmNsdWRlZCBmcm9tIGEgbWFsZSBhcnRpc3QuIA0KKyBUbyBhZHZhbmNlIGVudmlyb25tZW50YWxpc20sIHNoZSBkZWNpZGVzIHRvIGluY2x1ZGUgZWl0aGVyIG9uZSBvciBib3RoIG9mIHRoZSBwaWVjZXMg4oCcQWdpbmcgRWFydGjigJ0gYW5kIOKAnFdhc3RlZCBSZXNvdXJjZXMu4oCdIA0KKyBUbyBhZHZhbmNlIE5hdGl2ZSBBbWVyaWNhbiByaWdodHMsIHNoZSBkZWNpZGVzIHRvIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHBpZWNlIGJ5IFN0dWFydC4gDQorIFRvIGFkdmFuY2Ugc2NpZW5jZSwgc2hlIGRlY2lkZXMgdG8gaW5jbHVkZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwaWVjZXM6IOKAnEJleW9uZCzigJ0g4oCcV2hvIEhhcyBDb250cm9sLOKAnSDigJxXaGVyZSBhcmUgd2Ugbm93P+KAnSBhbmQg4oCcUGlvbmVlcnMu4oCdIA0KKyBGb3IgdGhpcyBleGhpYml0LCB0aGUgbXVzZXVtIG9ubHkgaGFzIGVub3VnaCBmbG9vciBzcGFjZToNCiAgLSBmb3IgZm91ciBzY3VscHR1cmVzIA0KICAtIGVub3VnaCB3YWxsIHNwYWNlIGZvciBhcm91bmQgMjAgcGFpbnRpbmdzLCBjb2xsYWdlcywgYW5kIGRyYXdpbmdzLiANCisgaWYg4oCcTmFyY2lzc2lzbeKAnSBpcyBkaXNwbGF5ZWQsIOKAnFJlZmxlY3Rpb27igJ0gc2hvdWxkIGFsc28gYmUgZGlzcGxheWVkIHNpbmNlIOKAnFJlZmxlY3Rpb27igJ0gYWxzbyBzdWdnZXN0cyBuYXJjaXNzaXNtLiANCg0KDQojIFByb3Bvc2FsIDEgDQoNCiMjIyMjIFRoZSBHdWdnZW5oZWltIGRlY2lkZXMgdG8gYWxsb2NhdGUgJDQgbWlsbGlvbiB0byBmdW5kIHRoZSBleGhpYml0LiBHaXZlbiB0aGUgcGllY2VzIGF2YWlsYWJsZSBhbmQgdGhlIHNwZWNpZmljIHJlcXVpcmVtZW50cyBmcm9tIFZhbGVudGlubyBhbmQgQ2VsZXN0ZSwgZm9ybXVsYXRlIGFuZCBzb2x2ZSBhIEJJUCBtb2RlbCB0byBtYXhpbWl6ZSB0aGUgbnVtYmVyIG9mIHBpZWNlcyBkaXNwbGF5ZWQgaW4gdGhlIGV4aGliaXQgd2l0aG91dCBleGNlZWRpbmcgdGhlIGJ1ZGdldC4gSG93IG1hbnkgcGllY2VzIGFyZSBkaXNwbGF5ZWQ/IFdoaWNoIHBpZWNlcyBhcmUgZGlzcGxheWVkPyANCg0KYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cyA9ICJoaWRlIiwgaW5jbHVkZSA9IFRSVUV9DQpwcm9wXzEgPC0gbWFrZS5scCgwLCAzNCkNCg0Kc2V0LnR5cGUocHJvcF8xLCAxOjM0LCAiYmluYXJ5IikNCg0KbHAuY29udHJvbChwcm9wXzEsIHNlbnNlID0gIm1heCIpDQoNCm9ial9mbl9wcm9wXzEgPC0gbWF0cml4KGRhdGEgPSAxLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KDQojIFNldCBvYmplY3RpdmUgZm4gYW5kIGNvbnN0cmFpbnRzDQpzZXQub2JqZm4ocHJvcF8xLCBvYmpfZm5fcHJvcF8xKQ0KDQoNCiMgMSkgSGUgdGhlcmVmb3JlIGRlY2lkZXMgdG8gaW5jbHVkZSBvbmx5IG9uZSBjb2xsYWdlLg0KDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gOCksICAgICAjIDEtOA0KICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDkNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDYpLCAgICAgIyAxMC0xNQ0KICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDE2DQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAxMiksICAgICMgMTcNCiAgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyOSwgMzANCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDQpICAgICAgIyAzMS0zNA0KICApLCAiPSIsIDEpDQoNCiMgMikgSGUgdGhlcmVmb3JlIHdhbnRzIGF0IGxlYXN0IG9uZSB3aXJlIG1lc2ggc2N1bHB0dXJlIGRpc3BsYXllZCBpZiBhIGNvbXB1dGVyLWdlbmVyYXRlZCBkcmF3aW5nIGlzIGRpc3BsYXllZC4gDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICAxLCAxLCAxLCAtMywgLTMsICAgICAgICAgICAgICAgICAgICAgICAgICMgMSwgMiwgMywgNCwgNQ0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMjkpICAgICMgNi0zNA0KICApLCAiPD0iLCAwKQ0KDQojIDMpIEFsdGVybmF0aXZlbHksIGhlIHdhbnRzIGF0IGxlYXN0IG9uZSBjb21wdXRlci1nZW5lcmF0ZWQgZHJhd2luZyBkaXNwbGF5ZWQgaWYgYSB3aXJlIG1lc2ggc2N1bHB0dXJlIGlzIGRpc3BsYXllZC4NCmFkZC5jb25zdHJhaW50KHByb3BfMSwgY2JpbmQoDQogIC0yLCAtMiwgLTIsIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICMgMSwgMiwgMywgNCwgNQ0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMjkpICAgICMgNi0zNA0KICApLCAiPD0iLCAwKQ0KDQojIDQpIGF0IGxlYXN0IG9uZSBwaG90by1yZWFsaXN0aWMgcGFpbnRpbmcNCmFkZC5jb25zdHJhaW50KHByb3BfMSwgY2JpbmQoDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAxMyksICAgICAjIDEtMTMNCiAgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMTQsIDE1DQogIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDE2LCAxNywgMTgNCiAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMTkNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDE1KSAgICAgICMgMjAtMzQNCiAgKSwgIj49IiwgMSkNCg0KIyA1KSBhdCBsZWFzdCBvbmUgY3ViaXN0IHBhaW50aW5nDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTkpLCAgICAgIyAxLTE5DQogIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDIwDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSA2KSwgICAgICAjIDIxLTI2DQogIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDI3LCAyOA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gNikgICAgICAgIyAyOS0zNA0KICApLCAiPj0iLCAxKQ0KDQojIDYpIGF0IGxlYXN0IG9uZSBleHByZXNzaW9uaXN0IHBhaW50aW5nDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMjApLCAgICAgIyAxLTIwDQogIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDIxDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAxMykgICAgICAjIDIyLTM0DQogICksICI+PSIsIDEpDQoNCiMgNykgYXQgbGVhc3Qgb25lIHdhdGVyY29sb3IgcGFpbnRpbmcNCmFkZC5jb25zdHJhaW50KHByb3BfMSwgY2JpbmQoDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSA5KSwgICAgICAjIDEtOQ0KICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxMCwgMTENCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDE5KSwgICAgICMgMTItMzANCiAgMSwgMSwgMSwgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMzEsIDMyLCAzMywgMzQNCiAgKSwgIj49IiwgMSkNCg0KIyA4KSBhdCBsZWFzdCBvbmUgb2lsIHBhaW50aW5nDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTEpLCAgICAgIyAxLTExICAgDQogIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEyLCAxMw0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gOCksICAgICAgIyAxNC0yMQ0KICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyMiwgMjMNCiAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMjQsIDI1DQogIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDI2DQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSA4KQ0KICApLCAiPj0iLCAxKQ0KDQojIDkpIGhlIHdhbnRzIHRoZSBudW1iZXIgb2YgcGFpbnRpbmdzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aHJlZSB0aW1lcyB0aGUgbnVtYmVyIG9mIG90aGVyIGFydCBmb3Jtcw0KYWRkLmNvbnN0cmFpbnQocHJvcF8xLCBjYmluZCgNCiAgbWF0cml4KGRhdGEgPSAxLCBucm93ID0gMSwgbmNvbCA9IDkpLCAgICAgIyAxLTkNCiAgbWF0cml4KGRhdGEgPSAtMywgbnJvdyA9IDEsIG5jb2wgPSA2KSwgICAgIyAxMC0xNQ0KICBtYXRyaXgoZGF0YSA9IDEsIG5yb3cgPSAxLCBuY29sID0gMyksICAgICAjIDE2LTE4DQogIG1hdHJpeChkYXRhID0gLTMsIG5yb3cgPSAxLCBuY29sID0gNSksICAgICMgMTktMjMNCiAgbWF0cml4KGRhdGEgPSAxLCBucm93ID0gMSwgbmNvbCA9IDIpLCAgICAgIyAyMywgMjUNCiAgbWF0cml4KGRhdGEgPSAtMywgbnJvdyA9IDEsIG5jb2wgPSAzKSwgICAgIyAyNi0yOA0KICBtYXRyaXgoZGF0YSA9IDEsIG5yb3cgPSAxLCBuY29sID0gMiksICAgICAjIDI5LCAzMA0KICBtYXRyaXgoZGF0YSA9IC0zLCBucm93ID0gMSwgbmNvbCA9IDQpICAgICAjIDMxLTM0DQopLCAiPD0iLCAwKQ0KDQojIDEwKSBWYWxlbnRpbm8gd2FudHMgYWxsIGhpcyBvd24gcGFpbnRpbmdzIGluY2x1ZGVkIGluIHRoZSBleGhpYml0Lg0KYWRkLmNvbnN0cmFpbnQocHJvcF8xLCBjYmluZCgNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDMwKSwgICAgICMgMS0zMA0KICBtYXRyaXgoZGF0YSA9IDEsIG5yb3cgPSAxLCBuY29sID0gNCkgICAgICAgIyAzMS0zNA0KICApLCAiPSIsIDQpDQoNCiMgMTEpIEhlbGVuLCBhbmQgaGUgd2FudHMgYm90aCBvZiBoZXIgcGFpbnRpbmdzIGRpc3BsYXllZC4gDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gOSksICAgICAgIyAxLTkNCiAgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMTAsIDExDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAyMykgICAgICAjIDEyLTM0DQogICksICI9IiwgMikNCg0KIyAxMikgSGUgdGhlcmVmb3JlIGRlY2lkZXMgdG8gZGlzcGxheSBhcyBtYW55IHBpZWNlcyBmcm9tIERhdmlkIGFzIGZyb20gRW5yaXF1ZSBhbmQgdG8gZGlzcGxheSBhdCBsZWFzdCBvbmUgcGllY2UgZnJvbSBlYWNoIG9mIHRoZW0uDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTMpLCAgICAgIyAxLTEzDQogIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEzLCAxNQ0KICAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxNiwgMTcsIDE4DQogIC0xLCAtMSwgLTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDE5LCAyMCwgMjENCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDEzKSAgICAgICMgMjItMzQNCiAgKSwgIj0iLCAwKQ0KDQojIDEzKSB0byBkaXNwbGF5IGF0IGxlYXN0IG9uZSBwaWVjZSBmcm9tIERhdmlkDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTMpLCAgICAgIyAxLTEzDQogIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDE0LCAxNQ0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTkpDQogICksICI+PSIsIDEpIA0KDQojIDE0KSB0byBkaXNwbGF5IGF0IGxlYXN0IG9uZSBwaWVjZSBmcm9tIEVucmlxdWUNCmFkZC5jb25zdHJhaW50KHByb3BfMSwgY2JpbmQoDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAxOCksICAgICAjIDEtMTgNCiAgMSwgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMTksIDIwLCAyMQ0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTMpICAgICAgIyAyMi0zNA0KICApLCAiPj0iLCAxKQ0KDQoNCiMgMTUpIFZhbGVudGlubyB3aWxsIHRoZXJlZm9yZSBvbmx5IGFjY2VwdCBvbmUgZGlzcGxheSBwaWVjZSBmcm9tIFJpY2ssIGlmIGFueSBhdCBhbGwuIA0KYWRkLmNvbnN0cmFpbnQocHJvcF8xLCBjYmluZCgNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDI4KSwgICAgICMgMS0yOA0KICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyOSwgMzANCiAgMCwgMCwgMCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMzEtMzQNCiAgKSwgIjw9IiwgMSkNCg0KIyAxNikgVG8gc3VwcG9ydCBmZW1hbGUgYXJ0aXN0cywgc2hlIGRlY2lkZXMgdG8gaW5jbHVkZSBhdCBsZWFzdCBvbmUgcGllY2UgZnJvbSBhIGZlbWFsZSBhcnRpc3QgZm9yIGV2ZXJ5IHRocmVlIHBpZWNlcyBpbmNsdWRlZCBmcm9tIGEgbWFsZSBhcnRpc3QuIA0KYWRkLmNvbnN0cmFpbnQocHJvcF8xLCBjYmluZCgNCiAgbWF0cml4KGRhdGEgPSAxLCBucm93ID0gMSwgbmNvbCA9IDMpLCAgICAgICMgMSwgMiwgMw0KICBtYXRyaXgoZGF0YSA9IC0zLCBucm93ID0gMSwgbmNvbCA9IDQpLCAgICAgIyA0LCA1LCA2LCA3DQogIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9IDEsIG5jb2wgPSAyKSwgICAgICAjIDgsIDkNCiAgbWF0cml4KGRhdGEgPSAtMywgbnJvdyA9IDEsIG5jb2wgPSAyKSwgICAgICMgMTAsIDExDQogIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9IDEsIG5jb2wgPSA0KSwgICAgICAjIDEyLCAxMywgMTQsIDE1DQogIG1hdHJpeChkYXRhID0gLTMsIG5yb3cgPTEsIG5jb2wgPSAzKSwgICAgICAjIDE2LCAxNywgMTgNCiAgbWF0cml4KGRhdGEgPSAxLCBucm93ID0gMSwgbmNvbCA9IDgpLCAgICAgICMgMTktMjYNCiAgbWF0cml4KGRhdGEgPSAtMywgbnJvdyA9IDEsIG5jb2wgPSAyKSwgICAgICMgMjcsIDI4DQogIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9MSwgbmNvbCA9IDYpICAgICAgICAjIDI5LTM0DQogICksICI8PSIsIDApDQoNCg0KIyAxNykgVG8gYWR2YW5jZSBlbnZpcm9ubWVudGFsaXNtLCBzaGUgZGVjaWRlcyB0byBpbmNsdWRlIGVpdGhlciBvbmUgb3IgYm90aCBvZiB0aGUgcGllY2VzIOKAnEFnaW5nIEVhcnRo4oCdIGFuZCDigJxXYXN0ZWQgUmVzb3VyY2VzLuKAnSANCmFkZC5jb25zdHJhaW50KHByb3BfMSwgY2JpbmQoDQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSA3KSwgICAgICAjIDEtNw0KICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA4LCA5DQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAyNSkNCiAgKSwgIj49IiwgMSkNCg0KIyAxOCkgVG8gYWR2YW5jZSBOYXRpdmUgQW1lcmljYW4gcmlnaHRzLCBzaGUgZGVjaWRlcyB0byBpbmNsdWRlIGF0IGxlYXN0IG9uZSBwaWVjZSBieSBTdHVhcnQuIA0KYWRkLmNvbnN0cmFpbnQocHJvcF8xLCBjYmluZCgNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDIzKSwgICAgICMgMS0yMw0KICAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyNCwgMjUsIDI2DQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSA4KSAgICAgICAjIDI3LTM0DQogICksICI+PSIsIDEpDQoNCg0KIyAxOSkgVG8gYWR2YW5jZSBzY2llbmNlLCBzaGUgZGVjaWRlcyB0byBpbmNsdWRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBpZWNlczog4oCcQmV5b25kLOKAnSDigJxXaG8gSGFzIENvbnRyb2ws4oCdIOKAnFdoZXJlIGFyZSB3ZSBub3c/4oCdIGFuZCDigJxQaW9uZWVycy7igJ0gDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxLCAyLCAzDQogIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDQsIDUNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDE2KSwgICAgICMgNi0yMQ0KICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyMiwgMjMNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDExKSAgICAgICMgMjQtMzQNCiAgKSwgIj49IiwgMSkNCg0KIyAyMCkgdGhlIG11c2V1bSBvbmx5IGhhcyBlbm91Z2ggZmxvb3Igc3BhY2UgZm9yIGZvdXIgc2N1bHB0dXJlcyANCmFkZC5jb25zdHJhaW50KHByb3BfMSwgY2JpbmQoDQogIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDEsIDIsIDMNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDQpLCAgICAgICMgNC03DQogIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDgNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDcpLCAgICAgICMgOS0xNg0KICAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxNywgMTgNCiAgbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDE3KSAgICAgICMgMTktMzQNCiAgKSwgIjw9IiwgNCkNCg0KIyAyMSkgdGhlIG11c2V1bSBvbmx5IGhhcyBlbm91Z2ggd2FsbCBzcGFjZSBmb3IgYXJvdW5kIDIwIHBhaW50aW5ncywgY29sbGFnZXMsIGFuZCBkcmF3aW5ncy4gDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMyksICAgICAgIyAxLCAyLCAzDQogIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9IDEsIG5jb2wgPSA0KSwgICAgICAjIDQtNw0KICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA4DQogIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9IDEsIG5jb2wgPSA4KSwgICAgICAjIDktMTYNCiAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMTcsIDE4DQogIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9IDEsIG5jb2wgPSAxNikgICAgICAjMTktMzQNCiAgKSwgIjw9IiwgMjApDQoNCiMgMjIpIGlmIOKAnE5hcmNpc3Npc23igJ0gaXMgZGlzcGxheWVkLCDigJxSZWZsZWN0aW9u4oCdIHNob3VsZCBhbHNvIGJlIGRpc3BsYXllZCBzaW5jZSDigJxSZWZsZWN0aW9u4oCdIGFsc28gc3VnZ2VzdHMgbmFyY2lzc2lzbS4gDQphZGQuY29uc3RyYWludChwcm9wXzEsIGNiaW5kKA0KICBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMTYpLCAgICAgIyAxLTYNCiAgLTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDE3DQogIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAxMiksICAgICAjIDE4LTI5DQogIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMwDQogIDAsIDAsIDAsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMzEtMzQNCiAgKSwgIjw9IiwgMCkNCg0KIyAyMykgVGhlIEd1Z2dlbmhlaW0gZGVjaWRlcyB0byBhbGxvY2F0ZSAkNCBtaWxsaW9uIHRvIGZ1bmQgdGhlIGV4aGliaXQNCg0KIGFkZC5jb25zdHJhaW50KHByb3BfMSwgbWF0cml4KGRhdGEgPSBkYXRhX3JhdyRQcmljZSwgbnJvdyA9IDEsIG5jb2wgPSAzNCksICI8PSIsIDQwMDAwMDApDQoNCnNvbHZlKHByb3BfMSkNCg0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHMgPSAiaGlkZSIsIGluY2x1ZGUgPSBUUlVFfQ0KcGFzdGUwKA0KICBnZXQub2JqZWN0aXZlKHByb3BfMSksDQogICIgb3VnaHQgdG8gYmUgZGlzcGxheWVkIHdoaWxlIG1heGltaXppbmcgZmxvb3Igc3BhY2Ugd2hpbGUgcmVtYWluaW5nIHdpdGggYSAkNCBtaWxsaW9uIGJ1ZGdlIg0KKQ0KYGBgDQoxNSBvdWdodCB0byBiZSBkaXNwbGF5ZWQgd2hpbGUgbWF4aW1pemluZyBmbG9vciBzcGFjZSB3aGlsZSByZW1haW5pbmcgd2l0aCBhIDQgbWlsbGlvbiBidWRnZXQuDQoNCiMjIyMjIyBUQUJMRSAxOiBQcm9wb3NhbCAxLS1QbGFubmVkIERpc3BsYXkgUGllY2VzIA0KDQpgYGB7ciBlY2hvPUZBTFNFLH0NCmZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckSUQgPT0gKGdldC52YXJpYWJsZXMocHJvcF8xKSAqIGRhdGFfcmF3JElEKSlbLCBjKCJJRCIsICJBcnRpc3QiLCAiUGllY2UiLCAiRGVzY3JpcHRpb24ub2YuUGllY2UiLCAiUHJpY2UiKV0NCmBgYA0KDQojIyMjIyMgVEFCTEUgMjogUHJvcG9zYWwgMS0tUGllY2VzIE5vdCBQcm9jdXJlZCBmb3IgRGlzcGxheQ0KDQpgYGB7ciBlY2hvID0gRkFMU0V9DQpmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JElEICE9IChnZXQudmFyaWFibGVzKHByb3BfMSkgKiBkYXRhX3JhdyRJRCkpWywgYygiSUQiLCAiQXJ0aXN0IiwgIlBpZWNlIiwgIkRlc2NyaXB0aW9uLm9mLlBpZWNlIiwgIlByaWNlIildDQpgYGANCg0KYGBge3IgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gImhpZGUiLCBpbmNsdWRlID0gVFJVRX0NCnBhc3RlMCgNCiAgIlRoZSB0b3RhbCBzcGVudCB0byBkaXNwbGF5ICIsDQogIGdldC5vYmplY3RpdmUocHJvcF8xKSwNCiAgIiBwaWVjZXMgaXMgJCIsDQogIHN1bShnZXQudmFyaWFibGVzKHByb3BfMSkgKiBkYXRhX3JhdyRQcmljZSksDQogICIgbGVhdmluZyAkIiwNCiAgNDAwMDAwMCAtIHN1bShnZXQudmFyaWFibGVzKHByb3BfMSkgKiBkYXRhX3JhdyRQcmljZSksDQogICIuIFRodXMgYXJvdW5kICIsDQogIHJvdW5kKHN1bShnZXQudmFyaWFibGVzKHByb3BfMSkgKiBkYXRhX3JhdyRQcmljZSkvICg0MDAwMDAwIC0gIGdldC5vYmplY3RpdmUocHJvcF8xKSksIDQpKjEwMCwNCiAgIiUgb2YgdGhlIGJ1ZGdldCBoYXMgYmVlbiBhbGxvY2F0ZWQgYW5kIHV0aWxpemVkLiINCikNCmBgYA0KVGhlIHRvdGFsIHNwZW50IHRvIGRpc3BsYXkgMTUgcGllY2VzIGlzIDM5NTAwMDAgbGVhdmluZyA1MDAwMC4gVGh1cyBhcm91bmQgOTguNzUlIG9mIHRoZSBidWRnZXQgaGFzIGJlZW4gYWxsb2NhdGVkIGFuZCB1dGlsaXplZC4NCg0KIyBQcm9wb3NhbCAyDQoNCiMjIyMjIFRvIGVuc3VyZSB0aGF0IHRoZSBleGhpYml0IGRyYXdzIHRoZSBhdHRlbnRpb24gb2YgdGhlIHB1YmxpYywgQ2VsZXN0ZSBkZWNpZGVzIHRoYXQgaXQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IDIwIHBpZWNlcy4gRm9ybXVsYXRlIGFuZCBzb2x2ZSBhIEJJUCBtb2RlbCB0byBtaW5pbWl6ZSB0aGUgY29zdCBvZiB0aGUgZXhoaWJpdCB3aGlsZSBkaXNwbGF5aW5nIGF0IGxlYXN0IDIwIHBpZWNlcyBhbmQgbWVldGluZyB0aGUgcmVxdWlyZW1lbnRzIHNldCBieSBWYWxlbnRpbm8gYW5kIENlbGVzdGUuIEhvdyBtdWNoIGRvZXMgdGhlIGV4aGliaXQgY29zdD8gV2hpY2ggcGllY2VzIHNob3VsZCBiZSBkaXNwbGF5ZWQ/IA0KDQpgYGB7ciBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAiaGlkZSIsIGluY2x1ZGUgPSBUUlVFfQ0KcHJvcF8yIDwtIG1ha2UubHAoMCwgMzQpDQoNCnNldC50eXBlKHByb3BfMiwgMTozNCwgImJpbmFyeSIpDQoNCmxwLmNvbnRyb2wocHJvcF8yLCBzZW5zZSA9ICJtaW4iKQ0KDQpvYmpfZm5fcHJvcF8yIDwtIG1hdHJpeChkYXRhID0gZGF0YV9yYXckUHJpY2UsIG5yb3cgPSAxLCBuY29sID0gMzQpDQoNCiMgU2V0IG9iamVjdGl2ZSBmbiBhbmQgY29uc3RyYWludHMNCnNldC5vYmpmbihwcm9wXzIsIG9ial9mbl9wcm9wXzIpDQoNCiMgMSkgSGUgdGhlcmVmb3JlIGRlY2lkZXMgdG8gaW5jbHVkZSBvbmx5IG9uZSBjb2xsYWdlLg0KY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQpjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JE1lZGl1bS5TdHlsZSA9PSAiQ29sbGFnZSIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI9IiwgMSkNCg0KIyAyKSBIZSB0aGVyZWZvcmUgd2FudHMgYXQgbGVhc3Qgb25lIHdpcmUgbWVzaCBzY3VscHR1cmUgZGlzcGxheWVkIGlmIGEgY29tcHV0ZXItZ2VuZXJhdGVkIGRyYXdpbmcgaXMgZGlzcGxheWVkLiANCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIldpcmUgTWVzaCIpJElEKV0gPC0gMQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIkNvbXB1dGVyLWdlbmVyYXRlZCIpJElEKV0gPC0gLTMNCg0KYWRkLmNvbnN0cmFpbnQocHJvcF8yLCBjb25zdHJhaW50LCAiPD0iLCAwKQ0KDQojIDMpIEFsdGVybmF0aXZlbHksIGhlIHdhbnRzIGF0IGxlYXN0IG9uZSBjb21wdXRlci1nZW5lcmF0ZWQgZHJhd2luZyBkaXNwbGF5ZWQgaWYgYSB3aXJlIG1lc2ggc2N1bHB0dXJlIGlzIGRpc3BsYXllZC4NCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIldpcmUgTWVzaCIpJElEKV0gPC0gLTINCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJDb21wdXRlci1nZW5lcmF0ZWQiKSRJRCldIDwtIDENCg0KYWRkLmNvbnN0cmFpbnQocHJvcF8yLCBjb25zdHJhaW50LCAiPD0iLCAwKQ0KDQojIDQpIGF0IGxlYXN0IG9uZSBwaG90by1yZWFsaXN0aWMgcGFpbnRpbmcNCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIlBob3RvLVJlYWxpc3QiICYgZGF0YV9yYXckUGFpbnRpbmcgPT0gIlkiKSRJRCldIDwtIDENCg0KYWRkLmNvbnN0cmFpbnQocHJvcF8yLCBjb25zdHJhaW50LCAiPj0iLCAxKQ0KDQojIDUpIGF0IGxlYXN0IG9uZSBjdWJpc3QgcGFpbnRpbmcNCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIkN1YmlzdCIgJiBkYXRhX3JhdyRQYWludGluZyA9PSAiWSIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQoNCiMgNikgYXQgbGVhc3Qgb25lIGV4cHJlc3Npb25pc3QgcGFpbnRpbmcNCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gImV4cHJlc3Npb25pc3QiICYgZGF0YV9yYXckUGFpbnRpbmcgPT0gIlkiKSRJRCldIDwtIDENCg0KYWRkLmNvbnN0cmFpbnQocHJvcF8yLCBjb25zdHJhaW50LCAiPj0iLCAxKQ0KDQojIDcpIGF0IGxlYXN0IG9uZSB3YXRlcmNvbG9yIHBhaW50aW5nDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJXYXRlcmNvbG9yIiAmIGRhdGFfcmF3JFBhaW50aW5nID09ICJZIikkSUQpXSA8LSAxDQoNCmFkZC5jb25zdHJhaW50KHByb3BfMiwgY29uc3RyYWludCwgIj49IiwgMSkNCg0KIyA4KSBhdCBsZWFzdCBvbmUgb2lsIHBhaW50aW5nDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJPaWwiICYgZGF0YV9yYXckUGFpbnRpbmcgPT0gIlkiKSRJRCldIDwtIDENCg0KYWRkLmNvbnN0cmFpbnQocHJvcF8yLCBjb25zdHJhaW50LCAiPj0iLCAxKQ0KDQojIDkpIGhlIHdhbnRzIHRoZSBudW1iZXIgb2YgcGFpbnRpbmdzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aHJlZSB0aW1lcyB0aGUgbnVtYmVyIG9mIG90aGVyIGFydCBmb3Jtcw0KY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQpjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JFBhaW50aW5nID09ICJZIikkSUQpXSA8LSAtMw0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRQYWludGluZyA9PSAiTiIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI8PSIsIDApDQoNCiMgMTApIFZhbGVudGlubyB3YW50cyBhbGwgaGlzIG93biBwYWludGluZ3MgaW5jbHVkZWQgaW4gdGhlIGV4aGliaXQuDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckQXJ0aXN0ID09ICJWYWxlbnRpbm8iKSRJRCldIDwtIDENCg0KYWRkLmNvbnN0cmFpbnQocHJvcF8yLCBjb25zdHJhaW50LCAiPSIsIDQpDQoNCiMgMTEpIEhlbGVuLCBhbmQgaGUgd2FudHMgYm90aCBvZiBoZXIgcGFpbnRpbmdzIGRpc3BsYXllZC4gDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckQXJ0aXN0ID09ICJIZWxlbiIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI9IiwgMikNCg0KIyAxMikgSGUgdGhlcmVmb3JlIGRlY2lkZXMgdG8gZGlzcGxheSBhcyBtYW55IHBpZWNlcyBmcm9tIERhdmlkIGFzIGZyb20gRW5yaXF1ZSBhbmQgdG8gZGlzcGxheSBhdCBsZWFzdCBvbmUgcGllY2UgZnJvbSBlYWNoIG9mIHRoZW0uDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckQXJ0aXN0ID09ICJEYXZpZCIpJElEKV0gPC0gMQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIkVucmlxdWUiKSRJRCldIDwtIC0xDQoNCmFkZC5jb25zdHJhaW50KHByb3BfMiwgY29uc3RyYWludCwgIj0iLCAwKQ0KDQojIDEzKSB0byBkaXNwbGF5IGF0IGxlYXN0IG9uZSBwaWVjZSBmcm9tIERhdmlkDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckQXJ0aXN0ID09ICJEYXZpZCIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQoNCiMgMTQpIHRvIGRpc3BsYXkgYXQgbGVhc3Qgb25lIHBpZWNlIGZyb20gRW5yaXF1ZQ0KY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQpjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JEFydGlzdCA9PSAiRW5yaXF1ZSIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQoNCiMgMTUpIFZhbGVudGlubyB3aWxsIHRoZXJlZm9yZSBvbmx5IGFjY2VwdCBvbmUgZGlzcGxheSBwaWVjZSBmcm9tIFJpY2ssIGlmIGFueSBhdCBhbGwuIA0KY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQpjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JEFydGlzdCA9PSAiUmljayIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI8PSIsIDEpDQoNCiMgMTYpIFRvIHN1cHBvcnQgZmVtYWxlIGFydGlzdHMsIHNoZSBkZWNpZGVzIHRvIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHBpZWNlIGZyb20gYSBmZW1hbGUgYXJ0aXN0IGZvciBldmVyeSB0aHJlZSBwaWVjZXMgaW5jbHVkZWQgZnJvbSBhIG1hbGUgYXJ0aXN0LiANCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRHZW5kZXIgPT0gIk0iKSRJRCldIDwtIC0zDQpjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JEdlbmRlciA9PSAiRiIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI8PSIsIDApDQoNCiMgMTcpIFRvIGFkdmFuY2UgZW52aXJvbm1lbnRhbGlzbSwgc2hlIGRlY2lkZXMgdG8gaW5jbHVkZSBlaXRoZXIgb25lIG9yIGJvdGggb2YgdGhlIHBpZWNlcyDigJxBZ2luZyBFYXJ0aOKAnSBhbmQg4oCcV2FzdGVkIFJlc291cmNlcy7igJ0gDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckUGllY2UgPT0gIkFnaW5nIEVhcnRoIiB8IGRhdGFfcmF3JFBpZWNlID09ICJXYXN0ZWQgUmVzb3VyY2VzIiApJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQoNCiMgMTgpIFRvIGFkdmFuY2UgTmF0aXZlIEFtZXJpY2FuIHJpZ2h0cywgc2hlIGRlY2lkZXMgdG8gaW5jbHVkZSBhdCBsZWFzdCBvbmUgcGllY2UgYnkgU3R1YXJ0LiANCmNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIlN0dWFydCIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQoNCiMgMTkpIFRvIGFkdmFuY2Ugc2NpZW5jZSwgc2hlIGRlY2lkZXMgdG8gaW5jbHVkZSBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwaWVjZXM6IOKAnEJleW9uZCzigJ0g4oCcV2hvIEhhcyBDb250cm9sLOKAnSDigJxXaGVyZSBhcmUgd2Ugbm93P+KAnSBhbmQg4oCcUGlvbmVlcnMu4oCdIA0KY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQpjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JFBpZWNlID09ICJCZXlvbmQiIHwgZGF0YV9yYXckUGllY2UgPT0gIldobyBIYXMgQ29udHJvbD8iIHwgZGF0YV9yYXckUGllY2UgPT0gIldoZXJlIGFyZSB3ZSBub3c/IiB8IGRhdGFfcmF3JFBpZWNlID09ICJQaW9uZWVycyIpJElEKV0gPC0gMQ0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQoNCiMgMjApIHRoZSBtdXNldW0gb25seSBoYXMgZW5vdWdoIGZsb29yIHNwYWNlIGZvciBmb3VyIHNjdWxwdHVyZXMgDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGRhdGFfcmF3W2dyZXBsKCJzY3VscHR1cmUiLCBkYXRhX3JhdyREZXNjcmlwdGlvbi5vZi5QaWVjZSksIF0kSUQpXSA8LSAxDQoNCmFkZC5jb25zdHJhaW50KHByb3BfMiwgY29uc3RyYWludCwgIjw9IiwgNCkNCg0KIyAyMSkgdGhlIG11c2V1bSBvbmx5IGhhcyBlbm91Z2ggd2FsbCBzcGFjZSBmb3IgYXJvdW5kIDIwIHBhaW50aW5ncywgY29sbGFnZXMsIGFuZCBkcmF3aW5ncy4gDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGRhdGFfcmF3W2dyZXBsKCJwYWludGluZyIsIGRhdGFfcmF3JERlc2NyaXB0aW9uLm9mLlBpZWNlKSB8IGdyZXBsKCJjb2xsYWdlIiwgZGF0YV9yYXckRGVzY3JpcHRpb24ub2YuUGllY2UpIHwgZ3JlcGwoImRyYXdpbmciLCBkYXRhX3JhdyREZXNjcmlwdGlvbi5vZi5QaWVjZSksIF0kSUQpXSA8LSAxDQoNCmFkZC5jb25zdHJhaW50KHByb3BfMiwgY29uc3RyYWludCwgIjw9IiwgMjApDQoNCiMgMjIpIGlmIOKAnE5hcmNpc3Npc23igJ0gaXMgZGlzcGxheWVkLCDigJxSZWZsZWN0aW9u4oCdIHNob3VsZCBhbHNvIGJlIGRpc3BsYXllZCBzaW5jZSDigJxSZWZsZWN0aW9u4oCdIGFsc28gc3VnZ2VzdHMgbmFyY2lzc2lzbS4gDQpjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckUGllY2UgPT0gIk5hcmNpc3Npc20iKSRJRCldIDwtIDENCmNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckUGllY2UgPT0gIlJlZmxlY3Rpb24iKSRJRCldIDwtIC0xDQoNCmFkZC5jb25zdHJhaW50KHByb3BfMiwgY29uc3RyYWludCwgIjw9IiwgMCkNCg0KIyAyMykgQ2VsZXN0ZSBkZWNpZGVzIHRoYXQgaXQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IDIwIHBpZWNlcw0KDQphZGQuY29uc3RyYWludChwcm9wXzIsIG1hdHJpeChkYXRhID0gMSwgbnJvdyA9IDEsIG5jb2wgPSAzNCksICI+PSIsIDIwKQ0KDQoNCnNvbHZlKHByb3BfMikNCmBgYA0KDQpgYGB7ciBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAiaGlkZSIsIGluY2x1ZGU9RkFMU0V9DQojIE1ha2UgcmVzdWx0cyBhbmQgc2Vuc2l0aXZpdHkgdGFibGUgDQpwc19wcm9wXzIgPC0gZ2V0LnByaW1hbC5zb2x1dGlvbihwcm9wXzIpDQpvYmpfc2FfcHJvcF8yIDwtIGdldC5zZW5zaXRpdml0eS5vYmoocHJvcF8yKQ0KcmhzX3NhX3Byb3BfMiA8LSBnZXQuc2Vuc2l0aXZpdHkucmhzKHByb3BfMikNCg0KbnZfcHJvcF8yIDwtIGxlbmd0aChnZXQudmFyaWFibGVzKHByb3BfMikpDQptY19wcm9wXzIgPC0gbGVuZ3RoKGdldC5jb25zdHIudHlwZShwcm9wXzIpKQ0Kb3ZfcHJvcF8yIDwtIHBhc3RlMCgiT2JqZWN0aXZlIFZhbHVlID0gIiwgcHNfcHJvcF8yWzFdKQ0KDQpzYV90YWJfcHJvcF8yIDwtIHJiaW5kKHBzX3Byb3BfMlsyOihudl9wcm9wXzIgKyBtY19wcm9wXzIgKyAxKV0sIA0KICAgICAgICAgICAgICAgIHJvdW5kKGMocmhzX3NhX3Byb3BfMiRkdWFsc1sxOm1jX3Byb3BfMl0sIG9ial9mbl9wcm9wXzIpLCAyKSwNCiAgICAgICAgICAgICAgICByb3VuZChjKHJoc19zYV9wcm9wXzIkZHVhbHNmcm9tWzE6bWNfcHJvcF8yXSxvYmpfc2FfcHJvcF8yJG9iamZyb20pLCAyKSwNCiAgICAgICAgICAgICAgICByb3VuZChjKHJoc19zYV9wcm9wXzIkZHVhbHN0aWxsWzE6bWNfcHJvcF8yXSxvYmpfc2FfcHJvcF8yJG9ianRpbGwpLCAyKSkgDQpjb2xuYW1lcyhzYV90YWJfcHJvcF8yKSA8LSBjKHJvd25hbWVzKHByb3BfMiksIGNvbG5hbWVzKHByb3BfMikpDQpyb3duYW1lcyhzYV90YWJfcHJvcF8yKSA8LSBjKCJzb2x1dGlvbiIsICJkdWFscy9jb2VmIiwgIlNlbnMgRnJvbSIsICJTZW5zIFRpbGwiKSAgICAgIA0KDQojIFN1YnN0aXR1dGUgImluZiIgYW5kICItaW5mIiBzbyB0YWJsZXMgYXJlIGVhc2llciB0byByZWFkIChjb2RlZCBieSB0d28gY2xhc3NtYXRlcyEpDQpzYV90YWJfcHJvcF8yIDwtIGlmZWxzZShzYV90YWJfcHJvcF8yID09IC0xLjAwMGUrMzAsICItaW5mIiwgc2FfdGFiX3Byb3BfMikNCnNhX3RhYl9wcm9wXzIgPC0gaWZlbHNlKHNhX3RhYl9wcm9wXzIgPT0gMS4wMDBlKzMwLCAiaW5mIiwgc2FfdGFiX3Byb3BfMikNCg0KIyBQcmludCB0aGUgdGFibGUNCmtuaXRyOjprYWJsZShzYV90YWJfcHJvcF8yLCBmb3JtYXQuYXJncyA9IGxpc3QoYmlnLm1hcmsgPSAiLCIpKSAlPiUNCiAga2FibGVFeHRyYTo6a2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSkgJT4lIA0KICBrYWJsZUV4dHJhOjphZGRfZm9vdG5vdGUobGFiZWwgPSBvdl9wcm9wXzIsIG5vdGF0aW9uID0gIm5vbmUiKQ0KYGBgDQoNCmBgYHtyIGVjaG8gPSBGQUxTRSwgcmVzdWx0cyA9ICJoaWRlIiwgaW5jbHVkZSA9IEZBTFNFfQ0KcGFzdGUwKA0KICBzdW0oZ2V0LnZhcmlhYmxlcyhwcm9wXzIpKSwNCiAgIiB0b3RhbCBjYW4gYmUgZGlzcGxheWVkIHdoaWxlIG1pbml6aW1pemluZyB3aXRoIHdpdGggYXQgbGVhc3QgMjAgcGllY2VzIGRpc3BsYXllZC4iDQopDQoNCmBgYA0KMjAgdG90YWwgY2FuIGJlIGRpc3BsYXllZCB3aGlsZSBtaW5pbWl6aW5nIHdpdGggd2l0aCBhdCBsZWFzdCAyMCBwaWVjZXMgZGlzcGxheWVkLg0KDQpgYGB7ciBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAiaGlkZSIsIGluY2x1ZGUgPSBGQUxTRX0NCnBhc3RlMCgNCiAgIlRoZSBjb3N0IG9mIGRpc3BsYXlpbmcgIiwNCiAgc3VtKGdldC52YXJpYWJsZXMocHJvcF8yKSksDQogICIgcGllY2VzIHdpbGwgYmUgJCIsDQogIHJvdW5kKGdldC5vYmplY3RpdmUocHJvcF8yKSksDQogICIuIg0KKSANCmBgYA0KVGhlIGNvc3Qgb2YgZGlzcGxheWluZyAyMCBwaWVjZXMgd2lsbCBiZSAkNTQwMDAwMA0KDQojIyMjIyMgVEFCTEUgMzogUHJvcG9zYWwgMi0tUGxhbm5lZCBEaXNwbGF5IFBpZWNlcyANCg0KYGBge3IgZWNobyA9IEZBTFNFfQ0KZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRJRCA9PSBnZXQudmFyaWFibGVzKHByb3BfMikgKiBkYXRhX3JhdyRJRClbLCBjKCJJRCIsICJBcnRpc3QiLCAiUGllY2UiLCAiRGVzY3JpcHRpb24ub2YuUGllY2UiLCAiUHJpY2UiKV0NCmBgYA0KDQojIyMjIyMgVEFCTEUgNDogUHJvcG9zYWwgMi0tUGllY2VzIE5vdCBQcm9jdXJlZCBmb3IgRGlzcGxheQ0KDQpgYGB7ciBlY2hvID0gRkFMU0V9DQpmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JElEICE9IGdldC52YXJpYWJsZXMocHJvcF8yKSAqIGRhdGFfcmF3JElEKVssIGMoIklEIiwgIkFydGlzdCIsICJQaWVjZSIsICJEZXNjcmlwdGlvbi5vZi5QaWVjZSIsICJQcmljZSIpXQ0KYGBgDQoNCiMgUHJvcG9zYWwgMw0KDQojIyMjIyBBcHBhcmVudGx5IFZhbGVudGlubyBhbmQgQ2VsZXN0ZSB3ZXJlIHVzaW5nIGFuIG9sZCBwcmljaW5nIHNoZWV0IHdoZW4gdGhleSBtYWRlIHRoZWlyIGV4aGliaXQgZGVjaXNpb25zLiBUaGV5IHN0aWxsIHdhbnQgdG8gbWFpbnRhaW4gdGhlIHNhbWUgY3JpdGVyaWEsIGJ1dCByZWFsaXplIHRoZSBjb3N0IG9mIGVhY2ggcGllY2Ugb2YgYXJ0IGNvdWxkIGluY3JlYXNlIG9yIGRlY3JlYXNlIGJ5IGFzIG11Y2ggYXMgMjAlIG9mIHRoZSBjb3N0IG9uIHRoZSBvbGQgcHJpY2Ugc2hlZXQuIFRoYXQgaXMsIHRoZSByYW5kb20gcHJpY2UgY2hhbmdlIG9mIGVhY2ggcGllY2UgY2FuIHJhbmdlIGJldHdlZW4g4oCTMjAlIGFuZCArMjAlIGluZGVwZW5kZW50bHkgd2l0aCBlcXVhbCBwcm9iYWJpbGl0eS4gSG93IGRvZXMgdGhhdCBwb3NzaWJpbGl0eSBpbXBhY3QgdGhlIGNvc3Qgb2YgQ2VsZXN0ZeKAmXMgcGxhbiBpbiBwYXJ0IDI/IA0KDQoNCmBgYHtyIGVjaG8gPSBGQUxTRSwgcmVzdWx0cyA9ICJoaWRlIiwgaW5jbHVkZSA9IFRSVUV9DQojIG51bWJlciBvZiBzaW11bGF0aW9ucw0KbiA8LSAxMDAwDQoNCiMgR2VuZXJhdGUgcmFuZG9tIHZhcmlhYmxlIHdpdGggbWVhbiAxMCBhbmQgc2QgMg0Kc2V0LnNlZWQoMTIzNCkNCg0KIyBhcHBseWluZyByYW5kb20gdmFyaWFibGUgZ2VuZXJhdGlvbiB2aWEgdW5pZm9ybSBkaXN0cmlidXRpb24gZG93biB0aGUgIlByaWNlIiBjb2x1bW4gb2YgZGF0YWZyYW1lIHRvIGdlbmVyYXRlIDEwMDAgcG9zc2libGUgcHJpY2VzDQoNCmNvc3RfbWF0cml4IDwtIHNhcHBseShkYXRhX3JhdyRQcmljZSwgZnVuY3Rpb24oeCkgcnVuaWYobiwgeCooLjgpLCB4KigxLjIwKSkpDQoNCmNvbG5hbWVzKGNvc3RfbWF0cml4KSA8LSBkYXRhX3JhdyRJRA0KDQoNCm5ld19wcmljZXMgPC0gdmVjdG9yKCkNCg0KZm9yIChpIGluIDE6bil7DQogICMgU2V0IHVwIG1vZGVsDQogIHByb3BfMyA8LSBtYWtlLmxwKDAsIDM0KQ0KDQogIHNldC50eXBlKHByb3BfMywgMTozNCwgImJpbmFyeSIpDQoNCiAgbHAuY29udHJvbChwcm9wXzMsIHNlbnNlID0gIm1pbiIpDQogIA0KICAjIFNldCBvYmplY3RpdmUgZm4gYW5kIGNvbnN0cmFpbnRzIGJ5IHB1bGxpbmcgYSByYW5kb20gbnVtYmVyDQogIG9ial9mbl9wcm9wXzMgPC0gYXBwbHkoY29zdF9tYXRyaXgsIE1BUkdJTiA9IDIsIGZ1bmN0aW9uKHgpIHNhbXBsZSh4LCAxLCByZXBsYWNlID0gVFJVRSkpDQogIA0KICBzZXQub2JqZm4ocHJvcF8zLCBvYmpfZm5fcHJvcF8zKQ0KDQogIA0KICAjIDEpIEhlIHRoZXJlZm9yZSBkZWNpZGVzIHRvIGluY2x1ZGUgb25seSBvbmUgY29sbGFnZS4NCiAgY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJDb2xsYWdlIikkSUQpXSA8LSAxDQogIA0KICBhZGQuY29uc3RyYWludChwcm9wXzMsIGNvbnN0cmFpbnQsICI9IiwgMSkNCiAgDQogICMgMikgSGUgdGhlcmVmb3JlIHdhbnRzIGF0IGxlYXN0IG9uZSB3aXJlIG1lc2ggc2N1bHB0dXJlIGRpc3BsYXllZCBpZiBhIGNvbXB1dGVyLWdlbmVyYXRlZCBkcmF3aW5nIGlzIGRpc3BsYXllZC4gDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JE1lZGl1bS5TdHlsZSA9PSAiV2lyZSBNZXNoIikkSUQpXSA8LSAxDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJDb21wdXRlci1nZW5lcmF0ZWQiKSRJRCldIDwtIC0zDQogIA0KICBhZGQuY29uc3RyYWludChwcm9wXzMsIGNvbnN0cmFpbnQsICI8PSIsIDApDQogIA0KICAjIDMpIEFsdGVybmF0aXZlbHksIGhlIHdhbnRzIGF0IGxlYXN0IG9uZSBjb21wdXRlci1nZW5lcmF0ZWQgZHJhd2luZyBkaXNwbGF5ZWQgaWYgYSB3aXJlIG1lc2ggc2N1bHB0dXJlIGlzIGRpc3BsYXllZC4NCiAgY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJXaXJlIE1lc2giKSRJRCldIDwtIC0yDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJDb21wdXRlci1nZW5lcmF0ZWQiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIjw9IiwgMCkNCiAgDQogICMgNCkgYXQgbGVhc3Qgb25lIHBob3RvLXJlYWxpc3RpYyBwYWludGluZw0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIlBob3RvLVJlYWxpc3QiICYgZGF0YV9yYXckUGFpbnRpbmcgPT0gIlkiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIj49IiwgMSkNCiAgDQogICMgNSkgYXQgbGVhc3Qgb25lIGN1YmlzdCBwYWludGluZw0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gIkN1YmlzdCIgJiBkYXRhX3JhdyRQYWludGluZyA9PSAiWSIpJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPj0iLCAxKQ0KICANCiAgIyA2KSBhdCBsZWFzdCBvbmUgZXhwcmVzc2lvbmlzdCBwYWludGluZw0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRNZWRpdW0uU3R5bGUgPT0gImV4cHJlc3Npb25pc3QiICYgZGF0YV9yYXckUGFpbnRpbmcgPT0gIlkiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIj49IiwgMSkNCiAgDQogICMgNykgYXQgbGVhc3Qgb25lIHdhdGVyY29sb3IgcGFpbnRpbmcNCiAgY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJXYXRlcmNvbG9yIiAmIGRhdGFfcmF3JFBhaW50aW5nID09ICJZIikkSUQpXSA8LSAxDQogIA0KICBhZGQuY29uc3RyYWludChwcm9wXzMsIGNvbnN0cmFpbnQsICI+PSIsIDEpDQogIA0KICAjIDgpIGF0IGxlYXN0IG9uZSBvaWwgcGFpbnRpbmcNCiAgY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckTWVkaXVtLlN0eWxlID09ICJPaWwiICYgZGF0YV9yYXckUGFpbnRpbmcgPT0gIlkiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIj49IiwgMSkNCiAgDQogICMgOSkgaGUgd2FudHMgdGhlIG51bWJlciBvZiBwYWludGluZ3MgdG8gYmUgbm8gZ3JlYXRlciB0aGFuIHRocmVlIHRpbWVzIHRoZSBudW1iZXIgb2Ygb3RoZXIgYXJ0IGZvcm1zDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JFBhaW50aW5nID09ICJZIikkSUQpXSA8LSAtMw0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JFBhaW50aW5nID09ICJOIikkSUQpXSA8LSAxDQogIA0KICBhZGQuY29uc3RyYWludChwcm9wXzMsIGNvbnN0cmFpbnQsICI8PSIsIDApDQogIA0KICAjIDEwKSBWYWxlbnRpbm8gd2FudHMgYWxsIGhpcyBvd24gcGFpbnRpbmdzIGluY2x1ZGVkIGluIHRoZSBleGhpYml0Lg0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIlZhbGVudGlubyIpJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPSIsIDQpDQogIA0KICAjIDExKSBIZWxlbiwgYW5kIGhlIHdhbnRzIGJvdGggb2YgaGVyIHBhaW50aW5ncyBkaXNwbGF5ZWQuIA0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIkhlbGVuIikkSUQpXSA8LSAxDQogIA0KICBhZGQuY29uc3RyYWludChwcm9wXzMsIGNvbnN0cmFpbnQsICI9IiwgMikNCiAgDQogICMgMTIpIEhlIHRoZXJlZm9yZSBkZWNpZGVzIHRvIGRpc3BsYXkgYXMgbWFueSBwaWVjZXMgZnJvbSBEYXZpZCBhcyBmcm9tIEVucmlxdWUgYW5kIHRvIGRpc3BsYXkgYXQgbGVhc3Qgb25lIHBpZWNlIGZyb20gZWFjaCBvZiB0aGVtLg0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIkRhdmlkIikkSUQpXSA8LSAxDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckQXJ0aXN0ID09ICJFbnJpcXVlIikkSUQpXSA8LSAtMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPSIsIDApDQogIA0KICAjIDEzKSB0byBkaXNwbGF5IGF0IGxlYXN0IG9uZSBwaWVjZSBmcm9tIERhdmlkDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JEFydGlzdCA9PSAiRGF2aWQiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIj49IiwgMSkNCiAgDQogICMgMTQpIHRvIGRpc3BsYXkgYXQgbGVhc3Qgb25lIHBpZWNlIGZyb20gRW5yaXF1ZQ0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIkVucmlxdWUiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIj49IiwgMSkNCiAgDQogICMgMTUpIFZhbGVudGlubyB3aWxsIHRoZXJlZm9yZSBvbmx5IGFjY2VwdCBvbmUgZGlzcGxheSBwaWVjZSBmcm9tIFJpY2ssIGlmIGFueSBhdCBhbGwuIA0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIlJpY2siKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIjw9IiwgMSkNCiAgDQogICMgMTYpIFRvIHN1cHBvcnQgZmVtYWxlIGFydGlzdHMsIHNoZSBkZWNpZGVzIHRvIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHBpZWNlIGZyb20gYSBmZW1hbGUgYXJ0aXN0IGZvciBldmVyeSB0aHJlZSBwaWVjZXMgaW5jbHVkZWQgZnJvbSBhIG1hbGUgYXJ0aXN0LiANCiAgY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckR2VuZGVyID09ICJNIikkSUQpXSA8LSAtMw0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JEdlbmRlciA9PSAiRiIpJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPD0iLCAwKQ0KICANCiAgIyAxNykgVG8gYWR2YW5jZSBlbnZpcm9ubWVudGFsaXNtLCBzaGUgZGVjaWRlcyB0byBpbmNsdWRlIGVpdGhlciBvbmUgb3IgYm90aCBvZiB0aGUgcGllY2VzIOKAnEFnaW5nIEVhcnRo4oCdIGFuZCDigJxXYXN0ZWQgUmVzb3VyY2VzLuKAnSANCiAgY29uc3RyYWludCA8LSBtYXRyaXgoZGF0YSA9IDAsIG5yb3cgPSAxLCBuY29sID0gMzQpDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckUGllY2UgPT0gIkFnaW5nIEVhcnRoIiB8IGRhdGFfcmF3JFBpZWNlID09ICJXYXN0ZWQgUmVzb3VyY2VzIiApJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPj0iLCAxKQ0KICANCiAgIyAxOCkgVG8gYWR2YW5jZSBOYXRpdmUgQW1lcmljYW4gcmlnaHRzLCBzaGUgZGVjaWRlcyB0byBpbmNsdWRlIGF0IGxlYXN0IG9uZSBwaWVjZSBieSBTdHVhcnQuIA0KICBjb25zdHJhaW50IDwtIG1hdHJpeChkYXRhID0gMCwgbnJvdyA9IDEsIG5jb2wgPSAzNCkNCiAgY29uc3RyYWludFssIGMoZmlsdGVyKGRhdGFfcmF3LCBkYXRhX3JhdyRBcnRpc3QgPT0gIlN0dWFydCIpJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPj0iLCAxKQ0KICANCiAgIyAxOSkgVG8gYWR2YW5jZSBzY2llbmNlLCBzaGUgZGVjaWRlcyB0byBpbmNsdWRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBpZWNlczog4oCcQmV5b25kLOKAnSDigJxXaG8gSGFzIENvbnRyb2ws4oCdIOKAnFdoZXJlIGFyZSB3ZSBub3c/4oCdIGFuZCDigJxQaW9uZWVycy7igJ0gDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JFBpZWNlID09ICJCZXlvbmQiIHwgZGF0YV9yYXckUGllY2UgPT0gIldobyBIYXMgQ29udHJvbD8iIHwgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfcmF3JFBpZWNlID09ICJXaGVyZSBhcmUgd2Ugbm93PyIgfCBkYXRhX3JhdyRQaWVjZSA9PSAiUGlvbmVlcnMiKSRJRCldIDwtIDENCiAgDQogIGFkZC5jb25zdHJhaW50KHByb3BfMywgY29uc3RyYWludCwgIj49IiwgMSkNCiAgDQogICMgMjApIHRoZSBtdXNldW0gb25seSBoYXMgZW5vdWdoIGZsb29yIHNwYWNlIGZvciBmb3VyIHNjdWxwdHVyZXMgDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhkYXRhX3Jhd1tncmVwbCgic2N1bHB0dXJlIiwgZGF0YV9yYXckRGVzY3JpcHRpb24ub2YuUGllY2UpLCBdJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPD0iLCA0KQ0KICANCiAgIyAyMSkgdGhlIG11c2V1bSBvbmx5IGhhcyBlbm91Z2ggd2FsbCBzcGFjZSBmb3IgYXJvdW5kIDIwIHBhaW50aW5ncywgY29sbGFnZXMsIGFuZCBkcmF3aW5ncy4gDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhkYXRhX3Jhd1tncmVwbCgicGFpbnRpbmciLCBkYXRhX3JhdyREZXNjcmlwdGlvbi5vZi5QaWVjZSkgfCBncmVwbCgiY29sbGFnZSIsIGRhdGFfcmF3JERlc2NyaXB0aW9uLm9mLlBpZWNlKSB8IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJkcmF3aW5nIiwgZGF0YV9yYXckRGVzY3JpcHRpb24ub2YuUGllY2UpLCBdJElEKV0gPC0gMQ0KICANCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBjb25zdHJhaW50LCAiPD0iLCAyMCkNCiAgDQogICMgMjIpIGlmIOKAnE5hcmNpc3Npc23igJ0gaXMgZGlzcGxheWVkLCDigJxSZWZsZWN0aW9u4oCdIHNob3VsZCBhbHNvIGJlIGRpc3BsYXllZCBzaW5jZSDigJxSZWZsZWN0aW9u4oCdIGFsc28gc3VnZ2VzdHMgbmFyY2lzc2lzbS4gDQogIGNvbnN0cmFpbnQgPC0gbWF0cml4KGRhdGEgPSAwLCBucm93ID0gMSwgbmNvbCA9IDM0KQ0KICBjb25zdHJhaW50WywgYyhmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JFBpZWNlID09ICJOYXJjaXNzaXNtIikkSUQpXSA8LSAxDQogIGNvbnN0cmFpbnRbLCBjKGZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckUGllY2UgPT0gIlJlZmxlY3Rpb24iKSRJRCldIDwtIC0xDQogIA0KICBhZGQuY29uc3RyYWludChwcm9wXzMsIGNvbnN0cmFpbnQsICI8PSIsIDApDQogIA0KICAjIDIzKSBDZWxlc3RlIGRlY2lkZXMgdGhhdCBpdCBtdXN0IGluY2x1ZGUgYXQgbGVhc3QgMjAgcGllY2VzDQoNCiAgYWRkLmNvbnN0cmFpbnQocHJvcF8zLCBtYXRyaXgoZGF0YSA9IDEsIG5yb3cgPSAxLCBuY29sID0gMzQpLCAiPj0iLCAyMCkNCiAgDQogIHNvbHZlKHByb3BfMykNCiAgDQogIG5ld19wcmljZXMgPC0gcmJpbmQobmV3X3ByaWNlcywgZ2V0Lm9iamVjdGl2ZShwcm9wXzMpKQ0KDQp9DQpgYGANCg0KIyMjIyMjIFRBQkxFIDU6IFNpbXVsYXRpb24gUmVzdWx0cyBhbmQgQ29tcGFyaXNpb24gDQoNCmBgYHtyIGVjaG8gPSBGQUxTRX0NCnNpbSA8LSBjYmluZCgNCiAgc2lnbmlmKHJiaW5kKA0KICAgIG1lYW4obmV3X3ByaWNlcyksDQogICAgc2QobmV3X3ByaWNlcyksDQogICAgbWF4KG5ld19wcmljZXMpLA0KICAgIG1pbihuZXdfcHJpY2VzKQ0KICApLCA4KSwNCiAgDQogIHJiaW5kKA0KICAgIGdldC5vYmplY3RpdmUocHJvcF8yKSwNCiAgICAxLA0KICAgIGdldC5vYmplY3RpdmUocHJvcF8yKSwNCiAgICBnZXQub2JqZWN0aXZlKHByb3BfMikNCiAgKSwNCiAgDQogIHNpZ25pZihyYmluZCgNCiAgICAobWVhbihuZXdfcHJpY2VzKS1nZXQub2JqZWN0aXZlKHByb3BfMikpLA0KICAgIDEsDQogICAgKG1heChuZXdfcHJpY2VzKS1nZXQub2JqZWN0aXZlKHByb3BfMikpLCANCiAgICAobWluKG5ld19wcmljZXMpLWdldC5vYmplY3RpdmUocHJvcF8yKSkNCiAgICApLCA0KSwNCiAgDQogIHNpZ25pZihyYmluZCgNCiAgICAobWVhbihuZXdfcHJpY2VzKS9nZXQub2JqZWN0aXZlKHByb3BfMiktMSkqMTAwLA0KICAgIDEsDQogICAgKG1heChuZXdfcHJpY2VzKS9nZXQub2JqZWN0aXZlKHByb3BfMiktMSkqMTAwLCANCiAgICAobWluKG5ld19wcmljZXMpL2dldC5vYmplY3RpdmUocHJvcF8yKS0xKSoxMDANCiAgICApLCA0KQ0KICANCiAgKQ0KDQoNCnJvd25hbWVzKHNpbSkgPC0gYygibWVhbiIsICJzZCIsICJtYXgiLCAibWluIikNCmNvbG5hbWVzKHNpbSkgPC0gYygiU2ltdWxhdGlvbiIsICJQcm9wb3NhbCAyIiwgIkRpZmZlcmVuY2UiLCAiUGVyY2VudGFnZSBDaGFuZ2UiKQ0KDQprYWJsZShzaW0sIGNhcHRpb24gPSAiUmVzdWx0cyBmcm9tIHNpbXVsYXRpb24iKSAlPiUNCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiYm9yZGVyZWQiKSkNCmBgYA0KDQoNCiMjIyMjIyBHUkFQSCAxOiBCYXIgQ2hhcnQgb2YgQ29zdCBEaXN0cmlidXRpb24NCg0KYGBge3IgZWNobyA9IEZBTFNFfQ0KYXMuZGF0YS5mcmFtZShuZXdfcHJpY2VzKSAlPiUgDQogIGdncGxvdChhZXMoeD1uZXdfcHJpY2VzKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMjUsIGZpbGwgPSAid2hpdGUiLCBjb2xvciA9ICJibGFjayIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBhcHBseShuZXdfcHJpY2VzLCAyLCBtZWFuKSwgY29sb3IgPSAicmVkIikrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGdldC5vYmplY3RpdmUocHJvcF8yKSwgY29sb3IgPSAiYmx1ZSIpKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBhcHBseShuZXdfcHJpY2VzLCAyLCBtZWFuKS1xbm9ybSgwLjk3NSkqYXBwbHkobmV3X3ByaWNlcywgMiwgc2QpLCBjb2xvciA9ICJkYXJrZ3JlZW4iKSsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYXBwbHkobmV3X3ByaWNlcywgMiwgbWVhbikrcW5vcm0oMC45NzUpKmFwcGx5KG5ld19wcmljZXMsIDIsIHNkKSwgY29sb3IgPSAiZGFya2dyZWVuIikrDQogIGxhYnModGl0bGUgPSAiIiwgeCA9ICJCdWRnZXQgUmFuZ2UiKSArIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCg0KIyMjIyMjIFRBQkxFIDY6IEluZGl2aWRhbCBDb3N0IFZhcmlhbmNlDQoNCmBgYHtyIGVjaG8gPSBGQUxTRX0NCmNvc3RfY29tcCA8LSBjYmluZCgNCiAgZGF0YV9yYXckSUQsDQogIGRhdGFfcmF3JFBpZWNlLA0KICBkYXRhX3JhdyRQcmljZSwNCiAgcm91bmQoYXBwbHkoY29zdF9tYXRyaXgsIDIsIG1lYW4pKSwNCiAgcm91bmQoYXBwbHkoY29zdF9tYXRyaXgsIDIsIHNkKSksDQogIHJvdW5kKGFwcGx5KGNvc3RfbWF0cml4LCAyLCBtaW4pKSwNCiAgcm91bmQoYXBwbHkoY29zdF9tYXRyaXgsIDIsIG1heCkpDQopDQoNCmNvbG5hbWVzKGNvc3RfY29tcCkgPC0gYygiUGllY2UgSUQiLCAiUGllY2UgTmFtZSIsICJPcmdpbmFsIFByaWNlIiwgIlNpbXVsYXRpb24gTWVhbiIsICJTaW11bGF0aW9uIFNEIiwgIk1pbiIsICJNYXgiKQ0KDQojIFNob3cgcmVzdWx0cywgbm90ZSB0aGF0IEwsIExxLCBXLCBXcSByZW1haW4gY29uc3RhbnQNCmNvc3RfY29tcCAlPiUgDQogIGthYmxlKCkgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImJvcmRlcmVkIikpDQpgYGANCg0KDQojIyMjIyMgVEFCTEUgNzogUHJvcG9zYWwgMy0tUGxhbm5lZCBEaXNwbGF5IFBpZWNlcw0KDQpgYGB7ciBlY2hvID0gRkFMU0V9DQpmaWx0ZXIoZGF0YV9yYXcsIGRhdGFfcmF3JElEID09IGdldC52YXJpYWJsZXMocHJvcF8zKSAqIGRhdGFfcmF3JElEKVssIGMoIklEIiwgIkFydGlzdCIsICJQaWVjZSIsICJEZXNjcmlwdGlvbi5vZi5QaWVjZSIsICJQcmljZSIpXQ0KYGBgDQoNCiMjIyMjIyBUQUJMRSA4OiBQcm9wb3NhbCAzLS1QaWVjZXMgTm90IFByb2N1cmVkIGZvciBEaXNwbGF5DQoNCmBgYHtyIGVjaG8gPSBGQUxTRX0NCmZpbHRlcihkYXRhX3JhdywgZGF0YV9yYXckSUQgIT0gZ2V0LnZhcmlhYmxlcyhwcm9wXzMpICogZGF0YV9yYXckSUQpWywgYygiSUQiLCAiQXJ0aXN0IiwgIlBpZWNlIiwgIkRlc2NyaXB0aW9uLm9mLlBpZWNlIiwgIlByaWNlIildDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=