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 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=