@adonoustech/bacon-tax 2.5.37 → 2.5.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -725,7 +725,7 @@ exports.ActionTaxFragments = [
725
725
  <li><strong>Communication Evidence:</strong> Copies of any written communication between you and the tenant regarding the lease cancellation and the agreement to terminate early, including emails or letters.</li>
726
726
  </ol>
727
727
  <p>These documents are crucial for determining the correct tax treatment of the lease cancellation payment you received. They will help to ensure that we report your income accurately and take advantage of any potential tax deductions or credits.</p>
728
- <p><strong>Action Required:</strong> Please provide these documents at your earliest convenience, but no later than [specific due date], to ensure timely completion of your tax preparation. You may send them via email at [your email address], upload through our secure client portal, or bring them to our office in person.</p>
728
+ <p><strong>Action Required:</strong> Please provide these documents at your earliest convenience, but no later than [specific due date], to ensure timely completion of your tax preparation. You may send them via email at tax@lendahandaccounting.com, upload through our secure client portal.</p>
729
729
  <p>If you have any questions or need further clarification, do not hesitate to contact us. We're here to help!</p>
730
730
  <p>Thank you for your prompt attention to this request.</p>`,
731
731
  },
@@ -759,7 +759,7 @@ exports.ActionTaxFragments = [
759
759
  <li>Details of how the improvement or service specifically benefited your rental property.</li>
760
760
  </ol>
761
761
  <p>This information is crucial for accurately determining potential tax deductions or credits associated with property value increases due to local improvements or services.</p>
762
- <p>If you have any questions or require assistance in gathering these documents, please don't hesitate to contact our office. Your prompt response is greatly appreciated to facilitate the timely completion of your tax documentation.</p>
762
+ <p>If you have any questions or require assistance in gathering these documents, please don't hesitate to contact us. Your prompt response is greatly appreciated to facilitate the timely completion of your tax documentation.</p>
763
763
  <p>Thank you for your attention to this matter.</p>`,
764
764
  },
765
765
  {
@@ -799,7 +799,7 @@ exports.ActionTaxFragments = [
799
799
  <li><strong>Receipts or Documentation of the Transaction:</strong> Any receipts, invoices, or other documentation that evidences the exchange.</li>
800
800
  </ol>
801
801
  <p>This information is crucial for ensuring compliance with tax laws and accurately reflecting your income. Your cooperation and prompt response will greatly assist in completing your tax preparation efficiently.</p>
802
- <p>Please submit the requested information as soon as possible to ensure timely processing of your tax return. If you have any questions or require assistance, feel free to contact our office.</p>
802
+ <p>Please submit the requested information as soon as possible to ensure timely processing of your tax return. If you have any questions or require assistance, feel free to contact us.</p>
803
803
  <p>Thank you for your attention to this matter.</p>`,
804
804
  },
805
805
  {
@@ -818,7 +818,7 @@ exports.ActionTaxFragments = [
818
818
  <li>Any additional relevant information</li>
819
819
  </ul>
820
820
  </ol>
821
- <p>Your prompt response to this request is highly appreciated and essential for ensuring that your financial records accurately reflect your tax obligations and benefits. Please provide the requested information by [Insert Deadline Here] to allow sufficient time for revisions and updates as necessary.</p>
821
+ <p>Your prompt response to this request is highly appreciated and essential for ensuring that your financial records accurately reflect your tax obligations and benefits. Please provide the requested information as soon as possible to allow sufficient time for revisions and updates as necessary.</p>
822
822
  <p>If you have any questions or need further clarification, please do not hesitate to contact us directly. We are here to support you in maintaining precise and compliant financial records.</p>
823
823
  <p>Thank you for your attention to this matter and your continued trust in our services.</p>`,
824
824
  },
@@ -894,7 +894,7 @@ exports.ActionTaxFragments = [
894
894
  <li><strong>Real Estate Licenses or Certifications:</strong> Copies of any licenses or certifications that validate your professional status in the real estate sector.</li>
895
895
  <li><strong>Calendar or Schedule:</strong> If available, a calendar or schedule reflecting your real estate activities throughout the year to help corroborate the time spent in these activities.</li>
896
896
  </ol>
897
- <p>Please ensure that this information is sent to us by [insert specific date here] to avoid any delays in processing your tax returns. Your prompt response is greatly appreciated. Should you have any questions, or require assistance in gathering these documents, do not hesitate to contact us.</p>`,
897
+ <p>Please ensure that this information is sent to us as soon as possible to avoid any delays in processing your tax returns. Your prompt response is greatly appreciated. Should you have any questions, or require assistance in gathering these documents, do not hesitate to contact us.</p>`,
898
898
  },
899
899
  {
900
900
  actionTaxSubject: "Partial Rental Property",
@@ -999,5 +999,300 @@ exports.ActionTaxFragments = [
999
999
  <p>If you have any questions or need clarification on what is required, do not hesitate to contact us. We're here to assist you every step of the way.</p>
1000
1000
  <p>Thank you for choosing our services.</p>`,
1001
1001
  },
1002
+ {
1003
+ actionTaxSubject: "Taxable Recovery",
1004
+ actionTitle: "Taxable Recovery",
1005
+ actionInstructions: `
1006
+ <p>Thank you for your recent confirmation regarding receiving payments or refunds considered a 'Taxable Recovery' during this tax year. To accurately incorporate this into your tax filings, we require some additional details. Could you please provide the following information:</p>
1007
+ <ol>
1008
+ <li><b>Amount of Taxable Recovery:</b> The total sum of all payments or refunds received that are classified as taxable recovery.</li>
1009
+ <li><b>Source Documentation:</b> Please provide any official statements or documents confirming these payments or refunds. This could include bank statements, refund or compensation letters, or any other relevant documentation.</li>
1010
+ <li><b>Nature of the Original Deduction or Credit:</b> A brief explanation or documentation of the original expense or investment that led to the taxable recovery. This includes the tax year of the deduction or credit.</li>
1011
+ <li><b>Date Received:</b> The specific dates when these payments or refunds were received.</li>
1012
+ <li><b>Any Related Expense Documentation:</b> If there were any expenses incurred to receive this recovery (such as legal fees), please provide detailed documentation.</li>
1013
+ </ol>
1014
+ <p>This information is vital for us to ensure your tax return is accurate and complies with all applicable laws. If you have multiple instances of taxable recoveries, please provide the above information for each separate instance.</p>
1015
+ <p>Please let us know if you need any assistance gathering this information. We are here to help you through every step of the tax preparation process.</p>`,
1016
+ },
1017
+ {
1018
+ actionTaxSubject: "Taxable Alimony",
1019
+ actionTitle: "Taxable Alimony",
1020
+ actionInstructions: ` <p>Thank you for providing preliminary information for your tax preparation. We understand that you have received alimony payments in this tax year. To accurately include this in your tax return, we require some additional details and documents based on the date of your divorce or separation agreement.</p>
1021
+ <p>Alimony payments are considered taxable income for the receiver depending on the date of the divorce or separation agreement. Divorce or separation agreements executed after December 31, 2018, do not count alimony payments as taxable income.</p>
1022
+ <p>Please provide the following information and documents to ensure we accurately account for these payments:</p>
1023
+ <ol>
1024
+ <li><strong>Date of your divorce or separation agreement:</strong> This determines whether the alimony payments you received are taxable. Please provide a copy of the divorce or separation agreement.</li>
1025
+ <li><strong>Amount of alimony received this tax year:</strong> Total annual amount received in alimony payments.</li>
1026
+ <li><strong>Documentation confirming alimony payments:</strong> Bank statements, transfer receipts, or any legal documents showing the amount of alimony received.</li>
1027
+ <li><strong>Payer’s information:</strong> Full name and Social Security Number (SSN) of the person from whom you have received the alimony payments.</li>
1028
+ </ol>
1029
+ <p>Your cooperation in providing these details at your earliest convenience is crucial for the timely and accurate preparation of your tax return. Please let us know if you have any questions or require assistance gathering these documents.</p>
1030
+ <p>Thank you for your prompt attention to this request.</p>`,
1031
+ },
1032
+ {
1033
+ actionTaxSubject: "Government Benefits",
1034
+ actionTitle: "Government Benefits",
1035
+ actionInstructions: `<p>We are in the process of preparing your tax returns and have noted that you reported receiving government benefits that may be taxable during the tax year. To ensure accurate and complete filing, we kindly request the following documents and information:</p>
1036
+ <ol>
1037
+ <li><strong>Form 1099-G:</strong> Please provide a copy of Form 1099-G for each instance of government benefits received. This form is typically issued for unemployment compensation, state or local income tax refunds, credits or offsets, and other government payments.</li>
1038
+ <li><strong>Detailed list of benefits received:</strong> If you received government benefits not reported on Form 1099-G (such as certain welfare benefits), please provide a detailed list including the type of benefit, amount received, and the agency that provided the benefit.</li>
1039
+ <li><strong>Social Security Benefits:</strong> If you received Social Security benefits, include your SSA-1099 or RRB-1099 form which reports these earnings.</li>
1040
+ <li><strong>Documentation for any withheld taxes:</strong> If taxes were withheld from any benefits received, include the applicable documentation showing the amount withheld.</li>
1041
+ </ol>
1042
+ <p>Please send the requested documents at your earliest convenience to ensure your tax filings are processed timely and correctly. If you have any questions or need assistance, do not hesitate to contact us.</p>
1043
+ <p>Thank you for your prompt attention to this matter.</p>`,
1044
+ },
1045
+ {
1046
+ actionTaxSubject: "Social Security Income",
1047
+ actionTitle: "Social Security Income",
1048
+ actionInstructions: `<p>We appreciate your cooperation as we proceed with preparing your tax return. As you've indicated receipt of Social Security benefits this tax year, we request the following documents/information to ensure accurate and complete tax filing:</p>
1049
+ <ol>
1050
+ <li><strong>Social Security Benefit Statement (Form SSA-1099)</strong> - This form details the total amount of social security benefits received. If you have misplaced this form, it can be obtained online through your Social Security account.</li>
1051
+ <li><strong>Notice of Adjusted Amount</strong> (if applicable) - If there have been any adjustments or corrections to your Social Security benefits during the year, please provide any notices or documentation reflecting these changes.</li>
1052
+ <li><strong>Supplemental Security Income (SSI)</strong> (if applicable) - Although SSI is typically not taxable, documentation of these payments is still required for comprehensive financial assessment.</li>
1053
+ </ol>
1054
+ <p>This information is crucial for accurately determining the taxable portion of your Social Security benefits, if any, and ensuring compliance with IRS regulations. Failure to provide accurate and complete information may result in delays or inaccuracies in your tax filing.</p>
1055
+ <p>Thank you for your prompt attention to these matters. Should you have any questions or require assistance in obtaining these documents, please do not hesitate to contact us.</p>`,
1056
+ },
1057
+ {
1058
+ actionTaxSubject: "Gambling Winnings",
1059
+ actionTitle: "Gambling Winnings",
1060
+ actionInstructions: `
1061
+ <p>We understand from your previous answers that you have experienced gambling winnings this tax year from lotteries, casinos, betting, or other forms of gambling. To ensure the accuracy and completeness of your tax filings, it's essential that we collect specific information regarding these winnings.</p>
1062
+ <p>Please provide the following details:</p>
1063
+ <ol>
1064
+ <li><strong>Documentation for Each Winning:</strong> This can include W-2G forms, statements from casinos, racetracks, or other gambling establishments, and any other official documentation that reports your winnings.</li>
1065
+ <li><strong>Dates of Winnings:</strong> The specific dates on which you had gambling winnings.</li>
1066
+ <li><strong>Types of Gambling Activities:</strong> Please specify whether your winnings were from lotteries, casinos, betting, sports betting, games of chance, or any other forms of gambling.</li>
1067
+ <li><strong>Amount of Winnings:</strong> The total amount won from each gambling activity. Please differentiate between cash winnings and the fair market value of any non-cash prizes.</li>
1068
+ <li><strong>Expenses Related to Gambling Activities:</strong> If applicable, list any expenses related to your gambling activities, such as buy-ins or travel expenses. Please note that the deductibility of these expenses may vary.</li>
1069
+ <li><strong>Losses:</strong> If you have records of your losses, please provide documentation of these losses as they can potentially offset your winnings for tax purposes. Note, losses can only be claimed up to the amount of total winnings.</li>
1070
+ </ol>
1071
+ <p>It's important to gather this information to accurately report your gambling winnings and any related deductions or losses on your tax return. Please ensure that the provided information is as detailed and accurate as possible to avoid any potential issues with your tax filing.</p>
1072
+ <p>Should you have any questions, or if you need assistance in gathering this information, please feel free to reach out. We're here to support you through this process.</p>`,
1073
+ },
1074
+ {
1075
+ actionTaxSubject: "Cancellation of Debt Income",
1076
+ actionTitle: "Cancellation of Debt Income",
1077
+ actionInstructions: `
1078
+ <p>Our records indicate you've answered <strong>yes</strong> to having debts forgiven, canceled, or discharged for less than the amount you owed during this tax year. To accurately report this information on your tax return and explore any applicable tax relief or exclusions, we need additional details from you. Please provide the following information at your earliest convenience:</p>
1079
+ <ol>
1080
+ <li><strong>Form 1099-C</strong>: Copies of any Form 1099-C you received related to the cancellation of debt.</li>
1081
+ <li><strong>Detailed List of Debts</strong>: If you didn't receive a Form 1099-C, please provide a detailed list of any debts that were canceled, including:
1082
+ <ul>
1083
+ <li>The name of the creditor</li>
1084
+ <li>The original amount of the debt</li>
1085
+ <li>The amount canceled</li>
1086
+ <li>The date of cancellation</li>
1087
+ </ul>
1088
+ </li>
1089
+ <li><strong>Explanation of Circumstances</strong>: A brief explanation of the circumstances leading to the debt cancellation (e.g., financial hardship, return of purchased goods, etc.).</li>
1090
+ <li><strong>Insolvency Documentation</strong>: If you were insolvent (where your total debts exceeded your total assets) immediately before the cancellation, please provide documentation supporting your financial status at that time.</li>
1091
+ </ol>
1092
+ <p>This information is critical for ensuring we accurately report your financial information and take advantage of any potential tax benefits related to the cancellation of debt. Please upload the requested documents through our secure client portal.</p>
1093
+ <p>Should you have any questions or need further clarification, do not hesitate to reach out. We're here to assist you every step of the way.</p>`,
1094
+ },
1095
+ {
1096
+ actionTaxSubject: "Primary Residence Debt Cancellation",
1097
+ actionTitle: "Primary Residence Debt Cancellation",
1098
+ actionInstructions: `<p>We are in the process of preparing your tax return and noted that you've indicated a portion of your mortgage for your primary residence was forgiven, canceled, or discharged during the tax year. To accurately reflect this in your tax documents and ensure compliance with IRS rules, we require the following documentation:</p>
1099
+ <ol>
1100
+ <li><b>Form 1099-C, Cancellation of Debt:</b> This is a crucial document that lenders must send you if they canceled or forgave a debt exceeding $600.</li>
1101
+ <li><b>Written communication from your lender:</b> Any letters or official documents from your lender regarding the cancellation, forgiveness, or discharge of your mortgage debt.</li>
1102
+ <li><b>Mortgage statements:</b> Please provide mortgage statements before and after the debt cancellation to show the change in your mortgage balance.</li>
1103
+ <li><b>Documentation related to the property:</b> This includes:
1104
+ <ul>
1105
+ <li>Your mortgage contract.</li>
1106
+ <li>Any documents related to foreclosure, if applicable.</li>
1107
+ <li>Documentation of a short sale, if applicable.</li>
1108
+ </ul>
1109
+ </li>
1110
+ <li><b>Record of payments made:</b> If you made any payments towards the mortgage during the tax year, please provide detailed statements indicating these payments.</li>
1111
+ </ol>
1112
+ <p>Please gather these documents at your earliest convenience and provide them to us. If you have any difficulty obtaining any of the information requested or have any questions, do not hesitate to contact us. Providing this information in a timely manner is crucial for the accurate preparation of your tax return.</p>
1113
+ <p>Thank you for your prompt attention to this matter.</p>`,
1114
+ },
1115
+ {
1116
+ actionTaxSubject: "Student Loan Debt Cancellation",
1117
+ actionTitle: "Student Loan Debt Cancellation",
1118
+ actionInstructions: `
1119
+ <p>In response to your recent confirmation regarding the cancellation, forgiveness, or discharge of student loan debt during this tax year, we require additional information to accurately process your tax return. This information is vital for ensuring compliance with tax laws and potentially maximizing your benefits. Please provide the following documents and information at your earliest convenience:</p>
1120
+ <ol>
1121
+ <li><strong>Official Cancellation or Forgiveness Notice:</strong> A copy of the official letter or notice from the lender or program administrator confirming the cancellation, forgiveness, or discharge of your student loan debt.</li>
1122
+ <li><strong>Student Loan Account Statement:</strong> A statement from before and after the loan forgiveness, cancellation, or discharge occurred, showing the outstanding balance and the balance after the action was taken.</li>
1123
+ <li><strong>Documentation of Qualifying Program Participation:</strong> If applicable, provide documentation or certificates of your participation in qualifying programs such as Public Service Loan Forgiveness (PSLF) or Teacher Loan Forgiveness, among others.</li>
1124
+ <li><strong>IRS Form 1099-C (if received):</strong> This form is issued by some lenders when a debt is forgiven or canceled and is crucial for tax reporting purposes. It includes the amount of forgiven debt that may be considered taxable income.</li>
1125
+ <li><strong>Detailed Description of Circumstances:</strong> A written explanation of the circumstances leading to the loan's cancellation, forgiveness, or discharge, including any documentation that supports your eligibility under the specific program or condition.</li>
1126
+ </ol>
1127
+ <p>Please ensure that all documents provided are complete and legible. You can upload the documents securely through our client portal.</p>
1128
+ <p>Your prompt attention to this request will enable us to accurately and efficiently complete your tax return. Should you have any questions or need further clarification, please do not hesitate to contact us.</p>
1129
+ <p>Thank you for your cooperation and trust in our services.</p>`,
1130
+ },
1131
+ {
1132
+ actionTaxSubject: "Hobby Income",
1133
+ actionTitle: "Hobby Income",
1134
+ actionInstructions: ` <p>Thank you for providing information regarding your income sources for this tax year. As part of our preparation for your tax return, we've noted that you've earned money from hobbies. To accurately report this to the IRS and ensure you comply with tax regulations, we require the following documentation:</p>
1135
+ <ol>
1136
+ <li><strong>Summary of Hobby Income:</strong> A detailed list of all income received from your hobby activities. Please include dates, amounts, and sources.</li>
1137
+ <li><strong>Expense Records:</strong> Documentation of any expenses related to your hobby activities. This can include materials, equipment, and any other costs incurred.</li>
1138
+ <li><strong>Bank Statements:</strong> Copies of bank statements that show the transactions related to your hobby income and expenses.</li>
1139
+ <li><strong>Proof of Prizes:</strong> If your hobby income includes prizes, please provide documentation or receipts that detail these awards.</li>
1140
+ <li><strong>Other Relevant Documents:</strong> Any other documentation that can support the income and expenses reported for your hobby activities.</li>
1141
+ </ol>
1142
+ <p>Please ensure you provide these documents at your earliest convenience to avoid delays in the tax return process. If you have any questions or need clarification on what is required, do not hesitate to contact us.</p>`,
1143
+ },
1144
+ {
1145
+ actionTaxSubject: "Certain Court Awards",
1146
+ actionTitle: "Certain Court Awards",
1147
+ actionInstructions: `<p>Thank you for indicating that you have received court awards or settlements in the past tax year. To ensure we accurately report these amounts and comply with tax obligations, we need some additional information regarding these awards or settlements.</p>
1148
+ <p>Please provide the following details:</p>
1149
+ <ol>
1150
+ <li><strong>Type of Award or Settlement:</strong> Specify the nature (e.g., lost wages, punitive damages, etc.).</li>
1151
+ <li><strong>Amount Received:</strong> The total amount awarded or settled, before any deductions.</li>
1152
+ <li><strong>Date Received:</strong> The exact date when you received the compensation.</li>
1153
+ <li><strong>Documentation:</strong> Any official documents or judgments pertaining to the award or settlement. This includes court orders, agreement letters, and receipts.</li>
1154
+ <li><strong>Tax Withheld:</strong> If applicable, the amount of federal or state tax already withheld from the settlement.</li>
1155
+ </ol>
1156
+ <p>It's imperative we receive this information to accurately determine the tax implications of your court award or settlement. Failure to report such income accurately could result in penalties or audits from the IRS.</p>
1157
+ <p>Please forward the requested information as soon as possible to ensure we have ample time for your tax preparation. Should you have any questions or need assistance gathering these documents, do not hesitate to contact us.</p>
1158
+ <p>We appreciate your prompt attention to this request and are here to help you through every step of your tax preparation process.</p>`,
1159
+ },
1160
+ {
1161
+ actionTaxSubject: "Prizes and Awards",
1162
+ actionTitle: "Prizes and Awards",
1163
+ actionInstructions: `
1164
+ <p>As part of our ongoing efforts to ensure the accuracy and completeness of your tax return, we have identified that you have received prizes or awards in the form of cash, goods, or services during the tax year. To accurately report these to the IRS, we require some additional details from you.</p>
1165
+ <p>Please provide the following information at your earliest convenience:</p>
1166
+ <ol>
1167
+ <li><strong>Description of Each Prize or Award:</strong> Briefly describe each prize or award received, including the nature (cash, goods, services) and context (contest, achievement award, etc.).</li>
1168
+ <li><strong>Value of Each Prize or Award:</strong> Provide the fair market value of each prize or award at the time of receipt. If the prize was in cash, specify the amount. If in goods or services, provide an estimated value.</li>
1169
+ <li><strong>Date of Receipt:</strong> Specify the date on which each prize or award was received.</li>
1170
+ <li><strong>Issuer Information:</strong> Provide the name and contact information (if available) of the organization or entity that awarded the prize or provided the award.</li>
1171
+ <li><strong>Any Withheld Taxes:</strong> Indicate if any taxes were withheld from the awarded amount and provide the withholding document(s), if available.</li>
1172
+ </ol>
1173
+ <p>It's crucial for tax purposes that we report these accurately to avoid any potential issues with the IRS.</p>
1174
+ <p>We appreciate your prompt attention to this matter and are here to assist you through this process.</p>`,
1175
+ },
1176
+ {
1177
+ actionTaxSubject: "Taxable Coverdell Distributions",
1178
+ actionTitle: "Taxable Coverdell Distributions",
1179
+ actionInstructions: `<p>We have noted that you indicated a withdrawal from a Coverdell Education Savings Account (ESA) or an Education IRA for educational expenses during this tax year. To accurately report these distributions and ensure compliance with IRS regulations, we require the following information:</p>
1180
+ <ol>
1181
+ <li>The total amount withdrawn from the Coverdell ESA or Education IRA.</li>
1182
+ <li>Detailed breakdown of how these funds were utilized, specifically:
1183
+ <ul>
1184
+ <li>Amount used for tuition and fees.</li>
1185
+ <li>Amount spent on books, supplies, and equipment required for enrollment or attendance.</li>
1186
+ <li>Any amounts spent on room and board, specifying if the beneficiary was enrolled at least half-time.</li>
1187
+ <li>Any additional qualified education expenses paid using these funds.</li>
1188
+ </ul>
1189
+ </li>
1190
+ <li>Proof of the beneficiary's enrollment status (e.g., tuition statement, enrollment verification).</li>
1191
+ <li>The name and address of the educational institution(s) involved.</li>
1192
+ <li>Any Form 1099-Q received pertaining to these distributions.</li>
1193
+ </ol>
1194
+ <p>Providing this detailed information will ensure that we maximize your tax benefits related to education expenses. Please gather these documents at your earliest convenience and let us know if you require assistance or have any questions.</p>`,
1195
+ },
1196
+ {
1197
+ actionTaxSubject: "Taxable QTP Distributions",
1198
+ actionTitle: "Taxable QTP Distributions",
1199
+ actionInstructions: `
1200
+ <p>We have noted that you indicated receiving distributions from a Qualified Tuition Program (QTP), commonly known as a 529 plan, during this tax year. To ensure accurate and efficient tax preparation related to these distributions, we kindly request the following detailed information:</p>
1201
+ <ol>
1202
+ <li><strong>Account Information:</strong> The name of the account holder and the beneficiary for each 529 plan distribution.</li>
1203
+ <li><strong>Distribution Statements:</strong> Copies of all 1099-Q forms received for each distribution this tax year.</li>
1204
+ <li><strong>Total Amount of Distributions:</strong> The total amount of money distributed from the QTP during the tax year.</li>
1205
+ <li><strong>Educational Expenses Documentation:</strong> Detailed records of the educational expenses for which the QTP distributions were used. This includes tuition, books, supplies, and any equipment required for enrollment or attendance at an eligible educational institution.</li>
1206
+ <li><strong>Expense Receipts:</strong> Receipts or statements that provide proof of the educational expenses.</li>
1207
+ <li><strong>Institution Information:</strong> Name and address of the educational institution(s) where the expenses were incurred.</li>
1208
+ <li><strong>Recipient's Information:</strong> For whom the expenses were incurred (the beneficiary of the 529 plan) and their Social Security Number.</li>
1209
+ </ol>
1210
+ <p>This information is essential for determining the taxability of the distributions and for optimizing your tax benefits. Please forward the requested documents and information at your earliest convenience. Should you have any questions or require assistance in gathering these documents, feel free to reach out.</p>
1211
+ <p>Thank you for your cooperation and prompt attention to this matter.</p>`,
1212
+ },
1213
+ {
1214
+ actionTaxSubject: "Strike Benefits",
1215
+ actionTitle: "Strike Benefits",
1216
+ actionInstructions: ` <p>We appreciate your cooperation as we work together to accurately prepare your tax return. It has come to our attention that you received strike benefits during the tax year due to participation in a labor strike. To ensure compliance and maximize your tax benefits, we kindly request the following information:</p>
1217
+ <ol>
1218
+ <li><strong>Total Amount of Strike Benefits Received:</strong> Please provide the total sum of strike benefits received during the tax year.</li>
1219
+ <li><strong>Source of Strike Benefits:</strong> Indicate whether these benefits were paid by your union, an insurance policy, or another source.</li>
1220
+ <li><strong>Documentation of Strike Benefits:</strong> Provide any forms, statements, or other documentation that show the receipt of these benefits.</li>
1221
+ <li><strong>Dates of Strike Participation:</strong> List the dates or duration of your participation in the labor strike.</li>
1222
+ <li><strong>Additional Costs or Expenses:</strong> If you incurred any costs or expenses related to participating in the strike (e.g., travel to picket lines, signage materials), please detail these.</li>
1223
+ </ol>
1224
+ <p>This information is critical for ensuring your tax return is accurate and may impact your taxable income. Please provide this information at your earliest convenience to avoid any delays in processing your tax return.</p>
1225
+ <p>If you have any questions or need further clarification, do not hesitate to contact us. We're here to help!</p>
1226
+ <p>Thank you for your prompt attention to this matter.</p>`,
1227
+ },
1228
+ {
1229
+ actionTaxSubject: "Jury Duty Pay",
1230
+ actionTitle: "Jury Duty Pay",
1231
+ actionInstructions: `<p>We are reaching the critical stages of your tax preparation and have noted that you received jury duty pay this tax year. To accurately report this income and explore any potential deductions or credits, we require the following information:</p>
1232
+ <ol>
1233
+ <li><strong>Total amount of Jury Duty Pay:</strong> Please provide the total amount you received for serving jury duty. This amount is often reported on Form 1099-G.</li>
1234
+ <li><strong>Jury Duty Dates:</strong> The dates you served on jury duty. This helps in verifying the duration and correlating it with the compensation received.</li>
1235
+ <li><strong>Employer Reimbursement:</strong> If your employer compensated you (in full or part) for the time you were serving on jury duty, please provide details of the amounts paid by your employer.</li>
1236
+ <li><strong>Bank Statements or Pay Stubs:</strong> Any bank statements or pay stubs showing the jury duty pay deposit or employer reimbursements. These documents help in verifying the amounts declared.</li>
1237
+ <li><strong>Form 1099-G (if received):</strong> Some jurisdictions provide a Form 1099-G for jury duty pay. If you received one, please include a copy.</li>
1238
+ </ol>
1239
+ <p>Providing these details at your earliest convenience will allow us to ensure your tax filings are accurate and complete. If you have any questions or need assistance gathering these documents, do not hesitate to reach out.</p>`,
1240
+ },
1241
+ {
1242
+ actionTaxSubject: "Alaska Permanent Funds Dividends",
1243
+ actionTitle: "Alaska Permanent Funds Dividends",
1244
+ actionInstructions: `
1245
+ <p>In reviewing the information provided for your tax return preparation, we noted that you indicated receiving dividends from the Alaska Permanent Fund during this tax year. To accurately report this information on your tax return and ensure compliance with the IRS guidelines, we kindly request the following details:</p>
1246
+ <ol>
1247
+ <li><b>1099-MISC Form:</b> Please provide a copy of the 1099-MISC form issued by the Alaska Permanent Fund Corporation. This form outlines the total amount of dividends received during the tax year.</li>
1248
+ <li><b>Bank Statements:</b> If possible, provide bank statements showing the deposit(s) of the dividends into your account. This serves as additional proof of income.</li>
1249
+ <li><b>Personal Identification Information:</b> Confirm your full legal name and Social Security Number to ensure there are no discrepancies between our records and the information provided on the 1099-MISC form.</li>
1250
+ <li><b>Previous Year's Dividend Information:</b> If you received dividends from the Alaska Permanent Fund in the previous tax year but have not provided this information, please do so. It is crucial for accurate reporting and to potentially identify any carryover effects on your current tax year.</li>
1251
+ </ol>
1252
+ <p>Your prompt response to this request is highly appreciated. Completing this information as soon as possible will enable us to progress with the preparation of your tax return efficiently. If you have any questions or need clarification on the requested documents, please do not hesitate to contact us.</p>`,
1253
+ },
1254
+ {
1255
+ actionTaxSubject: "Executor Fees",
1256
+ actionTitle: "Executor Fees",
1257
+ actionInstructions: `
1258
+ <p>We understand from your recent response that you have paid or received executor fees. To ensure accurate and complete tax preparation, we require detailed information related to these transactions. Please provide the following:</p>
1259
+ <ol>
1260
+ <li>A detailed statement of the executor fees paid or received, including dates and amounts.</li>
1261
+ <li>If you received executor fees, please provide your role (e.g., primary executor, co-executor) and the estate's name.</li>
1262
+ <li>If you paid executor fees, provide the name and tax identification number (SSN or EIN) of the individual or entity to whom the fees were paid.</li>
1263
+ <li>Any documentation that outlines the agreement or court order regarding the executor fee.</li>
1264
+ <li>Copies of bank statements or cancelled checks evidencing the payment or receipt of these fees.</li>
1265
+ <li>For fees received, please confirm whether taxes were withheld or not. If so, provide a copy of the Form 1099-MISC you received.</li>
1266
+ </ol>
1267
+ <p>This information is crucial for determining the tax implications of these executor fees and ensuring compliance with IRS guidelines. Please send the documents and information to us to facilitate a timely and accurate tax filing.</p>
1268
+ <p>If you have any questions or need further clarification, do not hesitate to contact us. Thank you for your prompt attention to this matter.</p>`,
1269
+ },
1270
+ {
1271
+ actionTaxSubject: "Event Gratuities and Gifts",
1272
+ actionTitle: "Event Gratuities and Gifts",
1273
+ actionInstructions: `<p>We are in the process of completing your tax return and need some additional information regarding the parties or events you hosted this tax year. Specifically, since you indicated that you received gifts, gratuities, or other forms of compensation as a result of these events, we require detailed information to ensure accurate reporting and compliance with tax regulations.</p>
1274
+ <p>Please provide the following information and documents:</p>
1275
+ <ol>
1276
+ <li>A detailed list of each event hosted, including:
1277
+ <ul>
1278
+ <li>Date of the event.</li>
1279
+ <li>Location of the event.</li>
1280
+ <li>Approximate number of attendees.</li>
1281
+ <li>Purpose of the event (e.g., sales promotion, customer appreciation).</li>
1282
+ </ul>
1283
+ </li>
1284
+ <li>Documentation for each gift, gratuity, or form of compensation received, such as:
1285
+ <ul>
1286
+ <li>Description of the gift or gratuity.</li>
1287
+ <li>Estimated fair market value at the time received.</li>
1288
+ <li>Name and contact information of the individual or entity providing the gift or gratuity.</li>
1289
+ <li>Any documentation or communication regarding the receipt of these items (e.g., thank you letters, emails confirming receipt).</li>
1290
+ </ul>
1291
+ </li>
1292
+ <li>Any receipts or documentation related to expenses incurred while hosting these events (e.g., catering, venue rental, entertainment).</li>
1293
+ </ol>
1294
+ <p>It is crucial that we accurately report all forms of income, including non-monetary compensation, to comply with IRS regulations. Your prompt response with the requested information will greatly assist in this process.</p>
1295
+ <p>If you have any questions or need further clarification, please do not hesitate to contact us.</p>`,
1296
+ },
1002
1297
  ];
1003
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs4SkFZc0k7S0FDM0o7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDhCQUE4QjtRQUNoRCxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7NE5BU29NO0tBQ3pOO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixrQkFBa0IsRUFBRTs7Ozs7Ozs7dUtBUStJO0tBQ3BLO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxpQ0FBaUM7UUFDbkQsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxrQkFBa0IsRUFBRTs7Ozs7Ozs7OztvUkFVNFA7S0FDalI7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7K0RBU3VDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx5QkFBeUI7UUFDM0MsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7cUdBVzZFO0tBQ2xHO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw2QkFBNkI7UUFDL0MsV0FBVyxFQUFFLDZCQUE2QjtRQUMxQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7OztrTEFVMEo7S0FDL0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsYUFBYTtRQUMxQixrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozt5TEFVaUs7S0FDdEw7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7O2tIQVUwRjtLQUMvRztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozt5R0FTaUY7S0FDdEc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLCtCQUErQjtRQUNqRCxXQUFXLEVBQUUsK0JBQStCO1FBQzVDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvS0FvQjRJO0tBQ2pLO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQ0FBZ0M7UUFDbEQsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozt3SkFVZ0k7S0FDcko7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGNBQWM7UUFDaEMsV0FBVyxFQUFFLGNBQWM7UUFDM0Isa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OytFQVd1RDtLQUM1RTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsaUJBQWlCO1FBQ25DLFdBQVcsRUFBRSxpQkFBaUI7UUFDOUIsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7K0RBVXVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw0QkFBNEI7UUFDOUMsV0FBVyxFQUFFLDRCQUE0QjtRQUN6QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7OzsrREFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGFBQWE7UUFDL0IsV0FBVyxFQUFFLGFBQWE7UUFDMUIsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OzsrREFZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7K0VBU3VEO0tBQzVFO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxtQ0FBbUM7UUFDckQsV0FBVyxFQUFFLG1DQUFtQztRQUNoRCxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FFQXdCNkM7S0FDbEU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7OzttTUFRMks7S0FDaE07SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzJDQWFtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0JBQWtCO1FBQ3BDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0Isa0JBQWtCLEVBQUU7Ozs7Ozs7O3NIQVE4RjtLQUNuSDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsc0JBQXNCO1FBQ3hDLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsa0JBQWtCLEVBQUU7Ozs7Ozs7O3lLQVFpSjtLQUN0SztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsV0FBVztRQUM3QixXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OzswSkFXa0k7S0FDdko7SUFDRDtRQUNFLGdCQUFnQixFQUFFLFdBQVc7UUFDN0IsV0FBVyxFQUFFLFdBQVc7UUFDeEIsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OzsrREFZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzsrREFjdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OzJDQVVtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBc0J1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNEJBQTRCO1FBQzlDLFdBQVcsRUFBRSw0QkFBNEI7UUFDekMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0pBK0IwSDtLQUMvSTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSx1QkFBdUI7UUFDcEMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0FpQ21CO0tBQ3hDO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OytEQVl1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsd0JBQXdCO1FBQzFDLFdBQVcsRUFBRSx3QkFBd0I7UUFDckMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7K0RBVXVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLFdBQVcsRUFBRSxlQUFlO1FBQzVCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7bUhBWTJGO0tBQ2hIO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLFdBQVcsRUFBRSxlQUFlO1FBQzVCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OytFQVV1RDtLQUM1RTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsb0JBQW9CO1FBQ3RDLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Z0VBVXdDO0tBQzdEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7bU9BUTJNO0tBQ2hPO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx3QkFBd0I7UUFDMUMsV0FBVyxFQUFFLHdCQUF3QjtRQUNyQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O3dEQWVnQztLQUNyRDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNEJBQTRCO1FBQzlDLFdBQVcsRUFBRSw0QkFBNEI7UUFDekMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0ZBbUJ1RTtLQUM1RjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7d0RBV2dDO0tBQ3JEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw4QkFBOEI7UUFDaEQsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O2lHQWV5RTtLQUM5RjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0Isa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBHQTBCa0Y7S0FDdkc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OzhLQVVzSjtLQUMzSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsK0JBQStCO1FBQ2pELFdBQVcsRUFBRSwrQkFBK0I7UUFDNUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozt3RUFTZ0Q7S0FDckU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7K1NBU3VSO0tBQzVTO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx5QkFBeUI7UUFDM0MsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lHQXVDeUU7S0FDOUY7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OytEQVV1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7MkNBVW1CO0tBQ3hDO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixrQkFBa0IsRUFBRTs7Ozs7Ozs7OzJDQVNtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMkJBQTJCO1FBQzdDLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Z0RBVXdCO0tBQzdDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBY3Rpb25UYXhGcmFnbWVudHMgPSBbXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmlvciBZZWFyIFRheCBSZXR1cm5zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogYFByb3ZpZGUgUHJpb3IgWWVhciBUYXggUmV0dXJuc2AsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIHJlcXVpcmUgeW91ciBhc3Npc3RhbmNlIHRvIGVuc3VyZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzLiBPbmUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB5b3VyIDxzdHJvbmc+UHJpb3IgWWVhciBUYXggUmV0dXJuczwvc3Ryb25nPi4gVGhpcyBkb2N1bWVudCBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdmVyaWZ5aW5nIGNhcnJ5LWZvcndhcmQgYW1vdW50cywgY29tcGFyaW5nIHllYXItb3Zlci15ZWFyIGluY29tZSBhbmQgZGVkdWN0aW9ucywgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cy48L3A+XHJcbiAgICA8cD5UbyBmYWNpbGl0YXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5GZWRlcmFsIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiB5b3VyIDxzdHJvbmc+U3RhdGUgdGF4IHJldHVybjwvc3Ryb25nPiBmb3IgdGhlIGxhc3QgdGF4IHllYXIsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+QW55IDxzdHJvbmc+bm90aWNlcyBvciBhbWVuZG1lbnRzPC9zdHJvbmc+IHJlbGF0ZWQgdG8geW91ciBwcmlvciB5ZWFyIHRheCByZXR1cm5zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IGRpZmZpY3VsdHkgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGxldCB1cyBrbm93IGFzIHNvb24gYXMgcG9zc2libGUgc28gd2UgY2FuIGRpc2N1c3MgYWx0ZXJuYXRpdmUgc29sdXRpb25zLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC4gUHJvdmlkaW5nIHRoZXNlIHdpbGwgZW5hYmxlIHVzIHRvIGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uIHdpdGhvdXQgZGVsYXkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0YXR1dG9yeSBFeHRlbnNpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogYERldGVybWluaW5nIEVsaWdpYmlsaXR5IGZvciBTdGF0dXRvcnkgRmlsaW5nIEV4dGVuc2lvbnNgLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHlvdSBxdWFsaWZ5IGZvciBzdGF0dXRvcnkgZmlsaW5nIGV4dGVuc2lvbnMgZm9yIHlvdXIgdGF4IHJldHVybnMsIHdlIHJlcXVpcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSB5b3UuIFBsZWFzZSBzZWUgYmVsb3cgdGhlIGNhdGVnb3JpZXMgb2YgaW5mb3JtYXRpb24gbmVlZGVkIGJhc2VkIG9uIGRpZmZlcmVudCBlbGlnaWJpbGl0eSBjcml0ZXJpYTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmVkZXJhbCBEaXNhc3RlciBBcmVhczwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q29uZmlybWF0aW9uIG9mIHlvdXIgcHJpbWFyeSByZXNpZGVuY2UgbG9jYXRpb24gZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHJlY2VpdmVkIHJlZ2FyZGluZyBkaXNhc3RlciBkZWNsYXJhdGlvbnMgaW4geW91ciBhcmVhLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MaXZpbmcgQWJyb2FkPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Qcm9vZiBvZiByZXNpZGVuY2Ugb3V0c2lkZSB0aGUgVW5pdGVkIFN0YXRlcyBmb3IgbW9yZSB0aGFuIDMzMCBmdWxsIGRheXMgd2l0aGluIGEgMTItbW9udGggcGVyaW9kLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgcGh5c2ljYWwgcHJlc2VuY2Ugb3IgYm9uYSBmaWRlIHJlc2lkZW5jZSBpbiBhIGZvcmVpZ24gY291bnRyeS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWN0aXZlIE1pbGl0YXJ5PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGluZGljYXRpbmcgYWN0aXZlIGR1dHkgc3RhdHVzLCBpbmNsdWRpbmcgZGF0ZXMgb2Ygc2VydmljZSB3aXRoaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgb3JkZXJzIGZvciBvdmVyc2VhcyBkZXBsb3ltZW50LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db21iYXQgWm9uZTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+T2ZmaWNpYWwgb3JkZXJzIGRlbW9uc3RyYXRpbmcgeW91ciBkZXBsb3ltZW50IHRvIGEgY29tYmF0IHpvbmUsIGluY2x1ZGluZyB0aGUgc3BlY2lmaWMgZGF0ZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgcmVsZXZhbnQgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2Ugb3Igb3RoZXIgb2ZmaWNpYWwgYm9kaWVzIHJlZ2FyZGluZyB5b3VyIHNlcnZpY2UgaW4gYSBjb21iYXQgem9uZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXBlbmRlbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZXF1ZXN0IGZvciBEZXBlbmRlbnQgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZGVwZW5kZW50cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhcHBseWluZyB0aGUgbW9zdCBiZW5lZmljaWFsIGRlcGVuZGVuY3kgdGVzdHMsIGluY2x1ZGluZyBxdWFsaWZpY2F0aW9ucyBmb3IgSGVhZCBvZiBIb3VzZWhvbGQgKEhPSCksIENoaWxkIFRheCBDcmVkaXQsIGFuZCBvdGhlciByZWxhdGVkIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggb2YgeW91ciBjbGFpbWVkIGRlcGVuZGVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZ1bGwgTmFtZTo8L3N0cm9uZz4gVGhlIGNvbXBsZXRlIGxlZ2FsIG5hbWUgb2YgdGhlIGRlcGVuZGVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChUSU4pOjwvc3Ryb25nPiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIEJpcnRoOjwvc3Ryb25nPiBIZWxwcyB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHkgZm9yIGNlcnRhaW4gY3JlZGl0cyBsaWtlIHRoZSBDaGlsZCBUYXggQ3JlZGl0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRpb25zaGlwIHRvIFlvdTo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGVwZW5kZW50J3MgcmVsYXRpb25zaGlwIChzb24sIGRhdWdodGVyLCBzdGVwY2hpbGQsIGZvc3RlciBjaGlsZCwgYnJvdGhlciwgc2lzdGVyLCBldGMuKSB0byB5b3UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3k6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GaW5hbmNpYWwgU3VwcG9ydDo8L3N0cm9uZz4gQ29uZmlybSB5b3UgcHJvdmlkZWQgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGRlcGVuZGVudOKAmXMgZmluYW5jaWFsIHN1cHBvcnQgZm9yIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q2l0aXplbnNoaXA6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBpcyBhIFUuUy4gY2l0aXplbiwgVS5TLiBuYXRpb25hbCwgb3IgYSByZXNpZGVudCBhbGllbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkZXBlbmRlbnQgaXMgbWFycmllZCBhbmQsIGlmIHNvLCB3aGV0aGVyIHRoZXkgYXJlIGZpbGluZyBqb2ludGx5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGRldGFpbHMgcmVnYXJkaW5nIGFueSBpbmNvbWUgdGhlIGRlcGVuZGVudCBtYXkgaGF2ZSBlYXJuZWQgb3IgcmVjZWl2ZWQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBpbmZvcm1hdGlvbiB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGZ1cnRoZXIgYXNzaXN0YW5jZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIZWFkIG9mIEhvdXNlaG9sZFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSGVhZCBvZiBIb3VzZWhvbGQgRmlsaW5nXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCB0YXggZmlsaW5nIHVuZGVyIHRoZSBcIkhlYWQgb2YgSG91c2Vob2xkXCIgc3RhdHVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIHN0YXR1cyBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYmVuZWZpdHMsIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIElSUyByZXF1aXJlbWVudHMgYXJlIG1ldC4gUGxlYXNlIHByb3ZpZGU6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+TWFyaXRhbCBTdGF0dXM6PC9zdHJvbmc+IENvbmZpcm1hdGlvbiBvZiB5b3VyIG1hcml0YWwgc3RhdHVzIGFzIG9mIHRoZSBsYXN0IGRheSBvZiB0aGUgdGF4IHllYXIgKGUuZy4sIHNpbmdsZSwgZGl2b3JjZWQsIGxlZ2FsbHkgc2VwYXJhdGVkKS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SG91c2Vob2xkIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIGluZGljYXRpbmcgdGhhdCB5b3UgcGFpZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY29zdHMgb2Yga2VlcGluZyB1cCBhIGhvbWUgZm9yIHRoZSB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyByZW50LCBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIHV0aWxpdGllcywgcmVwYWlycywgbWFpbnRlbmFuY2UsIGFuZCBncm9jZXJpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlF1YWxpZnlpbmcgUGVyc29uOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiB0aGUgcXVhbGlmeWluZyBwZXJzb24ocykgd2hvIGxpdmVkIHdpdGggeW91IGluIHRoZSBob21lIGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgeWVhciwgZXhjZXB0IGZvciB0ZW1wb3JhcnkgYWJzZW5jZXMgc3VjaCBhcyBzY2hvb2wuIFBsZWFzZSBpbmNsdWRlOlxyXG4gICAgICA8dWw+XHJcbiAgICAgIDxsaT5GdWxsIG5hbWUgYW5kIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIGNoaWxkLCBwYXJlbnQsIHNpYmxpbmcpLjwvbGk+XHJcbiAgICAgIDxsaT5EdXJhdGlvbiBvZiByZXNpZGVuY3kgYXQgeW91ciBob21lIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPlN1cHBvcnRpbmcgZG9jdW1lbnRzIChiaXJ0aCBjZXJ0aWZpY2F0ZXMsIHNjaG9vbCByZWNvcmRzLCBldGMuKSBwcm92aW5nIHRoZSByZXNpZGVuY3kgYW5kIHJlbGF0aW9uc2hpcC48L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgU3VwcG9ydDo8L3N0cm9uZz4gQW55IGZ1cnRoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHlvdXIgY2xhaW0gZm9yIHRoZSBIZWFkIG9mIEhvdXNlaG9sZCBmaWxpbmcgc3RhdHVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBwcm92aWRpbmcgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgeW91ciBiZW5lZml0IGFuZCB0byBjb21wbHkgd2l0aCB0YXggbGF3cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVzaWRlbmN5IFN0YXR1c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSW5mb3JtYXRpb24gb24gUmVzaWRlbmN5IFN0YXR1c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGVpdGhlciB5b3Ugb3IgeW91ciBzcG91c2UgaXMgbm90IGEgVS5TLiBjaXRpemVuLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIHRheCBzdGF0dXMsIHdlIG5lZWQgdG8gYXBwbHkgdGhlIG5lY2Vzc2FyeSBUYXggUmVzaWRlbmN5IFRlc3RzLCB3aGljaCBpbmNsdWRlIHRoZSA8c3Ryb25nPkdyZWVuIENhcmQgVGVzdDwvc3Ryb25nPiBhbmQgdGhlIDxzdHJvbmc+U3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdDwvc3Ryb25nPi4gVGhpcyB3aWxsIGhlbHAgdXMgZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIGNvbXBsZXRlZCBjb3JyZWN0bHkgYW5kIGNvbXBseSB3aXRoIFUuUy4gcmVndWxhdGlvbnMuPC9wPlxyXG5cclxuICAgIDxwPlRvIHByb2NlZWQsIHdlIGtpbmRseSBhc2sgeW91IHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+R3JlZW4gQ2FyZCBTdGF0dXM6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHlvdSBvciB5b3VyIHNwb3VzZSBoYXZlIGJlZW4gaXNzdWVkIGEgVS5TLiBncmVlbiBjYXJkIChMYXdmdWwgUGVybWFuZW50IFJlc2lkZW50IENhcmQpIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBJZiB5ZXMsIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBncmVlbiBjYXJkIG9yIHRoZSBvZmZpY2lhbCBkb2N1bWVudCBjb25maXJtaW5nIHRoZSBzdGF0dXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIEFycml2YWwgaW4gdGhlIFUuUy46PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlcyB3aGVuIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZmlyc3QgYXJyaXZlZCBpbiB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEhpc3Rvcnk6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgdGhlIGRhdGVzIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZW50ZXJlZCBhbmQgbGVmdCB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBTdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VmlzYSBUeXBlOjwvc3Ryb25nPiBJZiB5b3Ugb3IgeW91ciBzcG91c2UgYXJlIG9uIGEgdmlzYSwgcGxlYXNlIHNwZWNpZnkgdGhlIHR5cGUgYW5kIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSB2aXNhLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBUYXggRmlsaW5nczo8L3N0cm9uZz4gQ29waWVzIG9mIGxhc3QgeWVhcidzIHRheCByZXR1cm5zLCBpZiBhcHBsaWNhYmxlLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBwcm92aWRlIGNvbnRleHQgYW5kIGhlbHAgZGV0ZXJtaW5lIHJlc2lkZW5jeSBzdGF0dXMgbW9yZSBhY2N1cmF0ZWx5LjwvbGk+XHJcbiAgICA8L29sPlxyXG5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIFlvdSBjYW4gc2VuZCB0aGVtIHRvIHVzIHZpYSBlbWFpbCBvciB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC4gRm9yIGFueSBxdWVzdGlvbnMgb3IgYXNzaXN0YW5jZSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPlxyXG5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJKb2ludCBUYXggUmVsaWVmXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJKb2ludCBUYXggUmVsaWVmIERldGFpbHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGFzc2lzdCB5b3UgZWZmZWN0aXZlbHkgd2l0aCB5b3VyIHJlcXVlc3QgZm9yIGpvaW50IHRheCByZWxpZWYsIHdlIG5lZWQgdG8gY29sbGVjdCBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHlvdXIgc2l0dWF0aW9uIHRob3JvdWdobHkuIFRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgbW9zdCBzdWl0YWJsZSB0eXBlIG9mIHJlbGllZiBmb3IgeW91ciBjaXJjdW1zdGFuY2VzLCB3aGljaCBtYXkgaW5jbHVkZSBJbm5vY2VudCBTcG91c2UgUmVsaWVmLCBJbmp1cmVkIFNwb3VzZSBBbGxvY2F0aW9uLCBTZXBhcmF0aW9uIG9mIExpYWJpbGl0eSBSZWxpZWYsIG9yIEVxdWl0YWJsZSBSZWxpZWYuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tcGxldGUgVGF4IFJldHVybnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbGwgdGF4IHJldHVybnMgZm9yIHRoZSB5ZWFycyB5b3UgYXJlIHJlcXVlc3RpbmcgcmVsaWVmLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudDo8L3N0cm9uZz4gQSB3cml0dGVuIHN0YXRlbWVudCBleHBsYWluaW5nIHdoeSB5b3UgYmVsaWV2ZSB5b3UgcXVhbGlmeSBmb3IgcmVsaWVmLCBpbmNsdWRpbmcgYW55IHNwZWNpZmljIGV2ZW50cyBvciBjaXJjdW1zdGFuY2VzIHlvdSB3YW50IHVzIHRvIGNvbnNpZGVyLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBQcm9vZiBvZiB5b3VyIGN1cnJlbnQgaW5jb21lIGFuZCB0aGF0IG9mIHlvdXIgc3BvdXNlIGlmIGFwcGxpY2FibGUsIHN1Y2ggYXMgcmVjZW50IHBheSBzdHVicywgVy0yIGZvcm1zLCBvciBvdGhlciBpbmNvbWUgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBGaW5hbmNpYWwgU2l0dWF0aW9uOjwvc3Ryb25nPiBEb2N1bWVudHMgc2hvd2luZyB5b3VyIGN1cnJlbnQgZmluYW5jaWFsIHNpdHVhdGlvbiwgaW5jbHVkaW5nIGJhbmsgc3RhdGVtZW50cywgbW9udGhseSBiaWxscywgYW5kIGFueSBvdGhlciBsaWFiaWxpdGllcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIE1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byBzZXBhcmF0aW9uLCBkaXZvcmNlLCBvciBhbm51bG1lbnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmNlOjwvc3Ryb25nPiBEb2N1bWVudHMgdGhhdCBwcm92ZSB3aGVyZSBlYWNoIG9mIHlvdSBoYXMgbGl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhcnMgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgam9pbnQgdGF4IGxpYWJpbGl0eSwgcGxlYXNlIGluY2x1ZGUgY29waWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUuIFlvdSBtYXkgc2VuZCB0aGVtIHZpYSBlbWFpbCwgb3IgdXBsb2FkLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgdG8gcHJvdmlkZSwgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPldlIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHByb2Nlc3MgY2FuIGJlIGNvbXBsZXgsIGJ1dCB3ZSBhcmUgaGVyZSB0byBndWlkZSB5b3UgdGhyb3VnaCBpdC4gT3VyIGdvYWwgaXMgdG8gZW5zdXJlIHdlIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgeW91ciBzaXR1YXRpb24gdG8gYWR2b2NhdGUgZm9yIHRoZSBtb3N0IGZhdm9yYWJsZSBvdXRjb21lIG9uIHlvdXIgYmVoYWxmLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCIxMDk5IE5FQyBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIjEwOTkgTkVDIEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIHJlcXVpcmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYWxsIHlvdXIgc291cmNlcyBvZiBpbmNvbWUuIFNwZWNpZmljYWxseSwgd2UgbmVlZCB0byBhY2NvdW50IGZvciB5b3VyIDEwOTkgTkVDIEluY29tZS4gVGhlIDEwOTktTkVDIGZvcm0gaXMgY3J1Y2lhbCBmb3IgY29ycmVjdGx5IHJlcG9ydGluZyB5b3VyIG5vbi1lbXBsb3llZSBjb21wZW5zYXRpb24uPC9wPlxyXG4gICAgPHA+VG8gZW5zdXJlIGEgdGhvcm91Z2ggYW5kIGFjY3VyYXRlIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdXMgd2l0aCB0aGUgZm9sbG93aW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+QWxsIDEwOTktTkVDIGZvcm1zPC9iPiB5b3UgcmVjZWl2ZWQgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSA8Yj5hZGRpdGlvbmFsIG5vbi1lbXBsb3llZSBjb21wZW5zYXRpb248L2I+IG5vdCByZXBvcnRlZCBvbiBhIDEwOTktTkVDIGZvcm0uPC9saT5cclxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gcmVnYXJkaW5nIDxiPmV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciAxMDk5IE5FQyBpbmNvbWU8L2I+LCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHlldCByZWNlaXZlZCBhbGwgeW91ciAxMDk5LU5FQyBmb3JtcywgcGxlYXNlIGxldCB1cyBrbm93LCBhbmQgcHJvdmlkZSBhbiBlc3RpbWF0ZSBvZiB3aGVuIHlvdSBleHBlY3QgdG8gcmVjZWl2ZSB0aGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBhY2N1cmF0ZWx5IHJlcG9ydGluZyB5b3VyIGluY29tZSBhbmQgYXZvaWRpbmcgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMgZnJvbSB0aGUgSVJTLjwvcD5cclxuICAgIDxwPlBsZWFzZSByZWFjaCBvdXQgdG8gdXMgZGlyZWN0bHkgc2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24uIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBwcm9jZXNzZWQgZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPlxyXG5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTY2hlZHVsZSBLLTEgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNjaGVkdWxlIEstMSBJbmZvcm1hdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgU2NoZWR1bGUgSyBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBJbiBvcmRlciB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgZ2F0aGVyIGFsbCBuZWNlc3NhcnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBpbmNvbWUuPC9wPlxyXG4gICAgPHA+SWYgd2UgYXJlIHByZXBhcmluZyB5b3VyIGJ1c2luZXNzIHJldHVybiwgcmVzdCBhc3N1cmVkIHRoYXQgd2Ugd2lsbCBnZW5lcmF0ZSB0aGUgYXBwbGljYWJsZSBTY2hlZHVsZSBLLTEocykgZm9yIHlvdXIgYnVzaW5lc3MgaW50ZXJlc3RzLiBIb3dldmVyLCBpdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBjb2xsZWN0IGNvcGllcyBvZiA8c3Ryb25nPmFsbCBvdGhlciBTY2hlZHVsZSBLLTFzPC9zdHJvbmc+IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCB0byBpbmNvcnBvcmF0ZSBpbnRvIHlvdXIgcGVyc29uYWwgdGF4IHJldHVybi48L3A+ICBcclxuICAgIDxoMz5TcGVjaWZpYyBEb2N1bWVudCBSZXF1ZXN0OjwvaDM+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkFueSBhbmQgYWxsIFNjaGVkdWxlIEstMShzKSB5b3UgaGF2ZSByZWNlaXZlZCBmcm9tOjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+UGFydG5lcnNoaXBzPC9saT5cclxuICAgICAgICAgICAgPGxpPlMgQ29ycG9yYXRpb25zPC9saT5cclxuICAgICAgICAgICAgPGxpPkVzdGF0ZSBvciBUcnVzdHM8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYXJlIDxzdHJvbmc+Y2xlYXIgYW5kIGxlZ2libGU8L3N0cm9uZz4gdG8gcHJldmVudCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciByZXR1cm4uIFlvdSBtYXkgc3VibWl0IHRoZXNlIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCwgb3IgY29udGFjdCB1cyB0byBtYWtlIGFsdGVybmF0aXZlIGFycmFuZ2VtZW50cyBpZiBuZWNlc3NhcnkuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFueSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHRoZSBwcmVzZW5jZSBvZiBzZWxmLWVtcGxveW1lbnQgaW5jb21lIG5vdCByZXBvcnRlZCB0aHJvdWdoIDEwOTktTkVDIGZvcm1zIG9yIGEgU2NoZWR1bGUgSy0xLiBUbyBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBtYXhpbWl6ZXMgeW91ciBiZW5lZml0cywgaXQncyBjcnVjaWFsIHdlIGdhdGhlciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlc2Ugc291cmNlcyBvZiBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggc2VsZi1lbXBsb3ltZW50IGFjdGl2aXR5Ojwvc3Ryb25nPiBCcmllZmx5IGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YgZWFjaCBhY3Rpdml0eSBmcm9tIHdoaWNoIHlvdSBkZXJpdmUgc2VsZi1lbXBsb3ltZW50IGluY29tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIG9wZXJhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggc2VsZi1lbXBsb3ltZW50IGFjdGl2aXR5LCBzcGVjaWZ5IHRoZSBkYXRlcyBvciByYW5nZSBvZiBkYXRlcyBkdXJpbmcgd2hpY2ggeW91IGVhcm5lZCBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBpbmNvbWUgZ2VuZXJhdGVkOjwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgYmVmb3JlIGFueSBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2VzIGluY3VycmVkOjwvc3Ryb25nPiBMaXN0IGFsbCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggc2VsZi1lbXBsb3ltZW50IGFjdGl2aXR5LiBQbGVhc2UgY2F0ZWdvcml6ZSB0aGVzZSBleHBlbnNlcyAoZS5nLiwgb2ZmaWNlIHN1cHBsaWVzLCB0cmF2ZWwsIGFkdmVydGlzaW5nKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlY29yZHMgb3IgZG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IGV4aXN0aW5nIHJlY29yZHMgb3IgZG9jdW1lbnRhdGlvbiB0aGF0IGNvcnJvYm9yYXRlIHlvdXIgaW5jb21lIGFuZCBleHBlbnNlcywgc3VjaCBhcyBiYW5rIHN0YXRlbWVudHMsIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgY29udHJhY3RzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgYW1vdW50IG9mIHRheCB5b3Ugb3dlIGFuZCBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgdGhhdCBjYW4gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciB0aW1lbHkgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCwgYW5kIHdlIGFyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGVudHJ1c3RpbmcgdXMgd2l0aCB0aGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gQXMgcGFydCBvZiBvdXIgY29tcHJlaGVuc2l2ZSByZXZpZXcgYW5kIGluIG91ciBxdWVzdCB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZ3MsIHdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCB3YWdlcyBmcm9tIGVtcGxveW1lbnQgb3ZlciB0aGUgcGFzdCB0YXggeWVhci48L3A+XHJcbiAgICA8cD5UbyBwcm9jZWVkIGVmZmVjdGl2ZWx5LCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlctMiBGb3Jtczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFsbCBXLTIgZm9ybXMgcmVjZWl2ZWQgZnJvbSB5b3VyIGVtcGxveWVycy4gVGhpcyBpbmNsdWRlcyB3YWdlcyBlYXJuZWQgZnJvbSBhbGwgc291cmNlcywgbm90IGp1c3QgZnJvbSB0aGUgUy1Db3Jwb3JhdGlvbiwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlZlcmlmaWNhdGlvbiBvZiBTLUNvcnBvcmF0aW9uIFdhZ2VzOjwvc3Ryb25nPiBJZiB3ZSBhcmUgYWxzbyBoYW5kbGluZyB5b3VyIGJ1c2luZXNzIHRheGVzIGZvciBhbiBTLUNvcnBvcmF0aW9uLCB3ZSBsaWtlbHkgaGF2ZSB0aGUgd2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhhdCBlbnRpdHkuIEhvd2V2ZXIsIGZvciB0aG9yb3VnaG5lc3MgYW5kIGNvbXBsaWFuY2UsIHBsZWFzZSBjb25maXJtIGlmIHRoZSB3YWdlcyBmcm9tIHRoZSBTLUNvcnBvcmF0aW9uIGFyZSBmdWxseSByZXByZXNlbnRlZCBpbiB0aGUgZG9jdW1lbnRzIHdlIGFscmVhZHkgaG9sZC4gVGhpcyB3aWxsIGhlbHAgdXMgdmVyaWZ5IHRoYXQgYWxsIGluY29tZSBpcyBhY2N1cmF0ZWx5IHJlcG9ydGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBJbmNvbWUgRG9jdW1lbnRzOjwvc3Ryb25nPiBTaG91bGQgeW91IGhhdmUgb3RoZXIgc291cmNlcyBvZiB3YWdlIGluY29tZSAoZS5nLiwgY29udHJhY3Qgd29yaywgYm9udXNlcywgZXRjLikgbm90IGNvdmVyZWQgYnkgdGhlIFctMiBmb3JtcyBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgYW55IDEwOTkgZm9ybXMgb3Igb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgY29vcGVyYXRpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gS2luZGx5IHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJvcGVydHkgb3IgU2VydmljZXMgTGlldSBXYWdlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJvcGVydHkvU2VydmljZXMgaW4gTGlldSBvZiBXYWdlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIHByb3BlcnR5IGFuZC9vciBzZXJ2aWNlcyBpbiBsaWV1IG9mIHRyYWRpdGlvbmFsIHdhZ2VzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgdHlwZSBvZiBjb21wZW5zYXRpb24gY29uc3RpdHV0ZXMgdGF4YWJsZSBpbmNvbWUgYW5kIG11c3QgYmUgYWNjdXJhdGVseSByZXBvcnRlZCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGZ1bGx5IGNvbXBsaWFudCB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5UbyBhY2N1cmF0ZWx5IHJlY29nbml6ZSBhbmQgcmVwb3J0IHRoZXNlIGl0ZW1zIGFzIHRheGFibGUgaW5jb21lLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgUHJvcGVydHkgb3IgU2VydmljZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBhbnkgcHJvcGVydHkgb3Igc2VydmljZXMgeW91IHJlY2VpdmVkLiBQbGVhc2UgaW5jbHVkZSBwaHlzaWNhbCBjaGFyYWN0ZXJpc3RpY3MgZm9yIHByb3BlcnR5IG9yIHRoZSBzY29wZSBvZiBzZXJ2aWNlcyByZW5kZXJlZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RmFpciBNYXJrZXQgVmFsdWUgYXQgVGltZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBwcm9wZXJ0eSBvciBzZXJ2aWNlIGF0IHRoZSB0aW1lIHlvdSByZWNlaXZlZCBpdC4gSWYgeW91IGhhdmUgYW55IGFwcHJhaXNhbHMgb3IgZG9jdW1lbnRzIHRvIHN1cHBvcnQgdGhlIEZNViwgcGxlYXNlIGluY2x1ZGUgdGhlbS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvciBBZ3JlZW1lbnRzOjwvc3Ryb25nPiBQcm92aWRlIGFueSBkb2N1bWVudGF0aW9uIG9yIHdyaXR0ZW4gYWdyZWVtZW50cyB0aGF0IGRldGFpbCB0aGUgYXJyYW5nZW1lbnQgZm9yIHJlY2VpdmluZyBwcm9wZXJ0eSBvciBzZXJ2aWNlcyBpbiBsaWV1IG9mIHdhZ2VzLiBUaGlzIGNhbiBpbmNsdWRlIGNvbnRyYWN0cywgZW1haWxzLCBvciBhbnkgZm9ybSBvZiBjb21tdW5pY2F0aW9uIHRoYXQgb3V0bGluZXMgdGhlIGFncmVlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGUgcHJvcGVydHkgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkVtcGxveWVyL1Byb3ZpZGVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IHByb3ZpZGVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgYXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGFzIHBvc3NpYmxlLiBJbmNvbXBsZXRlIG9yIGluYWNjdXJhdGUgaW5mb3JtYXRpb24gbWF5IGxlYWQgdG8gZGVsYXlzIGluIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4gb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBJUlMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gcmVnYXJkaW5nIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcml0aWNhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSd2ZSBtZW50aW9uZWQgYmVpbmcgcmVpbWJ1cnNlZCBmb3IgY2VydGFpbiBleHBlbnNlcyB1bmRlciBhbiBFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHJlaW1idXJzZW1lbnRzIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIHRoZSBmb3JtYWwgd3JpdHRlbiBBY2NvdW50YWJsZSBQbGFuIHByb3ZpZGVkIGJ5IHlvdXIgZW1wbG95ZXIuIFRoaXMgc2hvdWxkIG91dGxpbmUgdGhlIGV4cGVuc2UgYWxsb3dhbmNlIGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSByZWltYnVyc2VtZW50IHBvbGljeS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb3JyZXNwb25kZW5jZSBmcm9tIHlvdXIgZW1wbG95ZXIgY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIEFjY291bnRhYmxlIFBsYW4uPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgZXhwZW5zZXMgcmVpbWJ1cnNlZCB1bmRlciB0aGUgcGxhbiwgaW5jbHVkaW5nIGRhdGVzLCBhbW91bnRzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgZXhwZW5zZSAocmVjZWlwdHMgb3IgaW52b2ljZXMpIHByb3ZpZGVkIHRvIHlvdXIgZW1wbG95ZXIgZm9yIHJlaW1idXJzZW1lbnQgdW5kZXIgdGhlIHBsYW4uPC9saT5cclxuICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBvciBpbmZvcm1hdGlvbiByZWxldmFudCB0byB0aGUgcmVpbWJ1cnNlbWVudHMgb3IgdGhlIEFjY291bnRhYmxlIFBsYW4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugc2VuZCB1cyB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHNtb290aGx5IHdpdGggeW91ciB0YXggcmV0dXJuIHByZXBhcmF0aW9uLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGVuc3VyaW5nIGFsbCBmb3JtcyBvZiBjb21wZW5zYXRpb24sIGluY2x1ZGluZyB0YXhhYmxlIGZyaW5nZSBiZW5lZml0cywgYXJlIGFjY3VyYXRlbHkgcmVwb3J0ZWQgb24geW91ciB0YXggcmV0dXJucy4gQmFzZWQgb24gb3VyIHByZXZpb3VzIGNvbW11bmljYXRpb24sIGl0IGFwcGVhcnMgeW91IG1heSBoYXZlIHJlY2VpdmVkIGJlbmVmaXRzIHRoYXQgbmVlZCB0byBiZSByZXZpZXdlZCBmdXJ0aGVyLiBUbyBhc3Npc3QgeW91IHByb3Blcmx5LCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgZGV0YWlsczo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIGJlbmVmaXQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZyaW5nZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXBhbnkgY2FycywgbWVtYmVyc2hpcHMsIGVkdWNhdGlvbmFsIGFzc2lzdGFuY2UsIGV0Yy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlZhbHVlIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIChGTVYpIG9mIGVhY2ggYmVuZWZpdC4gSWYgeW91J3JlIHVuc3VyZSwgcGxlYXNlIHByb3ZpZGUgYW4gZXN0aW1hdGUgYW5kIHRoZSBiYXNpcyBmb3IgdGhpcyBlc3RpbWF0ZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkFueSBhbW91bnRzIGNvbnRyaWJ1dGVkIGJ5IHlvdTo8L3N0cm9uZz4gSWYgeW91IG1hZGUgY29udHJpYnV0aW9ucyB0b3dhcmQgdGhlIGNvc3Qgb2YgYW55IGJlbmVmaXQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5CZW5lZml0IGRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgc3VjaCBhcyBzdGF0ZW1lbnRzLCBhZ3JlZW1lbnRzLCBvciByZWNlaXB0cy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRhdGVzOjwvc3Ryb25nPiBUaGUgcGVyaW9kIGR1cmluZyB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlc2UgYmVuZWZpdHMuIEluY2x1ZGUgc3BlY2lmaWMgZGF0ZXMgaWYgcG9zc2libGUuPC9saT5cclxuICA8bGk+PHN0cm9uZz5FbXBsb3llciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGVtcGxveWVyKHMpIHByb3ZpZGluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgZGV0ZXJtaW5pbmcgdGhlIHRheGFibGUgdmFsdWUgb2YgdGhlc2UgZnJpbmdlIGJlbmVmaXRzIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG48cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJOb24gVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBmaW5hbGl6aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBpZGVudGlmaWVkIHBvdGVudGlhbCBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMgdGhhdCBtYXkgYXBwbHkgdG8geW91ciBzaXR1YXRpb24uIFRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIG9wdGltaXplIHlvdXIgdGF4IG91dGNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFueSBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMgeW91IG1heSBoYXZlIHJlY2VpdmVkOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyBtYXkgaW5jbHVkZSBoZWFsdGggc2F2aW5ncyBhY2NvdW50cyAoSFNBcyksIGVtcGxveWVlIGRpc2NvdW50cywgcHVibGljIHRyYW5zaXQgcGFzc2VzLCBldGMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBGb3Igbm9uLXRheGFibGUgYmVuZWZpdHMsIHRoaXMgaGVscHMgaW4gcmVjb3JkLWtlZXBpbmcgYW5kIGNvbmZpcm1pbmcgZXhlbXB0aW9uIHN0YXR1cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gYW1vdW50cywgaWYgYW55Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0b3dhcmRzIGFueSBvZiB0aGVzZSBiZW5lZml0cywgaW5kaWNhdGUgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5CZW5lZml0IGRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIGNvcnJvYm9yYXRlIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgc3VjaCBhcyBzdGF0ZW1lbnRzLCBhZ3JlZW1lbnRzLCBvciByZWNlaXB0cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EYXRlcyBvZiByZWNlaXB0Ojwvc3Ryb25nPiBUaGUgdGltZWZyYW1lIGR1cmluZyB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlc2UgYmVuZWZpdHMuIEluY2x1ZGUgYXMgcHJlY2lzZSBkYXRlcyBhcyBwb3NzaWJsZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBvciBwcm92aWRlciBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgZW1wbG95ZXIocykgb3IgdGhpcmQtcGFydHkgcHJvdmlkZXIocykgb2ZmZXJpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5HYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiBoZWxwcyBlbnN1cmUgdGhhdCB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgZnVsbCBhZHZhbnRhZ2Ugb2Ygbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzLiBQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW55IGhlbHAgaWRlbnRpZnlpbmcgb3IgZG9jdW1lbnRpbmcgdGhlc2UgYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJWZXRlcmFuIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJWQSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4sIHdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBWZXRlcmFuIEJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiB0aGlzIHRhc2ssIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIFZldGVyYW4gQmVuZWZpdHMgeW91IHJlY2VpdmVkLCBpbmNsdWRpbmcgYW55IGRpc2FiaWxpdHksIGVkdWNhdGlvbiwgYW5kIHBlbnNpb24gYmVuZWZpdHMuPC9saT5cclxuICAgICAgICA8bGk+T2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCB0eXBlIG9mIGJlbmVmaXQgcmVjZWl2ZWQsIHN1Y2ggYXMgYXdhcmQgbGV0dGVycyBvciBzdGF0ZW1lbnRzIGZyb20gdGhlIERlcGFydG1lbnQgb2YgVmV0ZXJhbnMgQWZmYWlycyAoVkEpLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBjb3JyZXNwb25kZW5jZSBmcm9tIHRoZSBWQSBvciBvdGhlciByZWxldmFudCBlbnRpdGllcyByZWdhcmRpbmcgdGhlIHRheGFiaWxpdHkgb2YgeW91ciBiZW5lZml0cy48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgcmVjZWl2ZWQgZm9yIGVhY2ggYmVuZWZpdCB0aHJvdWdob3V0IHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5Bbnkgb3RoZXIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHByb3ZpZGUgY2xhcml0eSBvbiB0aGUgbmF0dXJlIGFuZCBhbW91bnQgb2YgeW91ciBWZXRlcmFuIEJlbmVmaXRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB3aGljaCBiZW5lZml0cyBhcmUgdGF4YWJsZSBhbmQgZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gUGxlYXNlIHN1Ym1pdCB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZSBJbnN1cmFuY2UgUGF5bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBtZW50aW9uIG9mIHJlY2VpdmluZyBsaWZlIGluc3VyYW5jZSBwYXltZW50cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIHRoZXNlIHByb2NlZWRzIGFyZSBpbmRlZWQgbm9uLXRheGFibGUsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSBsaWZlIGluc3VyYW5jZSBwYXltZW50cy48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIHBlcnRhaW5pbmcgdG8gdGhlIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgaW5zdXJlZCBpbmRpdmlkdWFsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgY29tbXVuaWNhdGlvbnMgb3IgbGV0dGVycyBmcm9tIHRoZSBpbnN1cmFuY2UgY29tcGFueSByZWdhcmRpbmcgdGhlIHRheCBzdGF0dXMgb2YgdGhlc2UgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPkRldGFpbHMgcmVnYXJkaW5nIGlmIHRoZSBwb2xpY3kgd2FzIHB1cmNoYXNlZCB3aXRoIGFmdGVyLXRheCBvciBwcmUtdGF4IGRvbGxhcnMuPC9saT5cclxuICAgICAgPGxpPklmIGFueSBwb3J0aW9uIG9mIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50IHdhcyBhbiBpbnZlc3RtZW50IHJldHVybiwgcGxlYXNlIHByb3ZpZGUgcmVsYXRlZCBkb2N1bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGd1YXJhbnRlZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk1lZGljYXJlIFdhaXZlciBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucywgd2Ugbm90ZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHMgdW5kZXIgdGhlIGRpZmZpY3VsdHktb2YtY2FyZSBwcm92aXNpb25zIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGVsaWdpYmxlIGluY29tZSBleGNsdXNpb25zLCBpdCdzIGNydWNpYWwgd2UgdmVyaWZ5IGNlcnRhaW4gaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgbGl2aW5nIGFycmFuZ2VtZW50LCBhcyBwZXIgSVJTIGd1aWRlbGluZXMuPC9wPlxyXG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBwYXltZW50cyBxdWFsaWZ5IGZvciBpbmNvbWUgZXhjbHVzaW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY2U6PC9zdHJvbmc+IERvY3VtZW50cyBwcm92aW5nIHRoYXQgeW91IGFuZCB0aGUgaW5kaXZpZHVhbCB1bmRlciBjYXJlIHNoYXJlZCB0aGUgc2FtZSBwcmltYXJ5IHJlc2lkZW5jZSBkdXJpbmcgdGhlIHJlY2VpcHQgb2YgdGhlc2UgcGF5bWVudHMuIFRoaXMgY291bGQgaW5jbHVkZSB1dGlsaXR5IGJpbGxzLCBhIHJlbnRhbCBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBpbiBib3RoIG9mIHlvdXIgbmFtZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBDYXJlIFJlY2lwaWVudDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNvbiByZWNlaXZpbmcgY2FyZSwgaW5jbHVkaW5nIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgYW5kIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgaWRlbnRpZmllcyB0aGVpciBuZWVkIGZvciBjYXJlIChlLmcuLCBhIGxldHRlciBmcm9tIGEgaGVhbHRoY2FyZSBwcm92aWRlcikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFJlY29yZHM6PC9zdHJvbmc+IEFueSByZWNvcmRzIG9mIHRoZSBNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHMgeW91IHJlY2VpdmVkLCBhcyB0aGlzIHdpbGwgaGVscCB1cyBkZXRlcm1pbmUgdGhlIGV4YWN0IGFtb3VudHMgYW5kIHRoZSBwZXJpb2RzIGNvdmVyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHMgb3IgQ29udHJhY3RzOjwvc3Ryb25nPiBJZiB0aGVyZSB3YXMgYSBmb3JtYWwgYWdyZWVtZW50IG9yIGNvbnRyYWN0IGRldGFpbGluZyB0aGUgY2FyZSBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgdGhpcyBhcyB3ZWxsLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGlmIHRoZSBjYXJlIGFycmFuZ2VtZW50IHdhcyBmYWNpbGl0YXRlZCB0aHJvdWdoIGEgc3RhdGUgb3IgdGhpcmQtcGFydHkgYWdlbmN5LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgd2UgY29tcGx5IHdpdGggdGF4aW5nIGF1dGhvcml0aWVzIHdoaWxlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGZpbmFuY2VzLiBJZiBhbnkgb2YgdGhlc2UgcmVxdWlyZW1lbnRzIHBvc2UgYSBkaWZmaWN1bHR5IG9yIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIE91ciBnb2FsIGlzIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBJbnN1cmFuY2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgaWYgdGhlc2UgYmVuZWZpdHMgYXJlIGVsaWdpYmxlIHRvIGJlIGV4Y2x1ZGVkIGZyb20geW91ciBpbmNvbWUsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgaW5zdXJhbmNlIHByZW1pdW1zIHBhaWQuPC9wPlxyXG4gICAgPHA+S2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHN0YXRlbWVudHMgb3IgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gb24gd2hvIHBhaWQgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyAoeW91IG9yIHlvdXIgZW1wbG95ZXIpLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgeW91IHBhaWQgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgc3VwcG9ydGluZyBkb2N1bWVudHMgZm9yIHRoZSBwYXltZW50cyBtYWRlIGJ5IHlvdSAocmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPklmIHlvdXIgZW1wbG95ZXIgY29udHJpYnV0ZWQgdG8gdGhlIHBheW1lbnQgb2YgdGhlIHByZW1pdW1zOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGJ5IHlvdXIgZW1wbG95ZXIgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRzIGluZGljYXRpbmcgZW1wbG95ZXIgY29udHJpYnV0aW9ucyAocGF5IHN0dWJzLCBlbXBsb3llciBsZXR0ZXJzKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBkZXRlcm1pbmUgdGhlIHRheGFibGUgcG9ydGlvbiwgaWYgYW55LCBvZiB5b3VyIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzLiBQcm92aWRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmcgYW5kIHBvdGVudGlhbGx5IGxvd2VyIHlvdXIgdGF4YWJsZSBpbmNvbWUuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB3ZSBjYW4gYmUgb2YgZnVydGhlciBhc3Npc3RhbmNlLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNhYmlsaXR5IFJldGlyZW1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4YWJpbGl0eSBvZiB0aGVzZSBiZW5lZml0cywgd2UgbmVlZCBhZGRpdGlvbmFsIGRldGFpbHMuIFRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzIGNhbiBkZXBlbmQgb24gd2hlbiB5b3UgdG9vayByZXRpcmVtZW50IGR1ZSB0byBkaXNhYmlsaXR5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBSZXRpcmVtZW50Ojwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSB5b3UgcmV0aXJlZCBkdWUgdG8gZGlzYWJpbGl0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgRGlzYWJpbGl0eSBSZXRpcmVtZW50Ojwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgaGF2ZSB0aGF0IGNvbmZpcm1zIHlvdXIgcmV0aXJlbWVudCB3YXMgZHVlIHRvIGRpc2FiaWxpdHkuIFRoaXMgbWF5IGluY2x1ZGUgbGV0dGVycyBmcm9tIHlvdXIgZW1wbG95ZXIsIHRoZSByZXRpcmVtZW50IHBsYW4sIG9yIG1lZGljYWwgcmVjb3Jkcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgQmVuZWZpdHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFNwZWNpZmljIGFtb3VudHMgYW5kIHRoZSBzb3VyY2Ugb2YgdGhlIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cy4gUGxlYXNlIGluY2x1ZGUgYW55IHJlbGF0ZWQgZG9jdW1lbnRzIHN1Y2ggYXMgc3RhdGVtZW50cyBvciBub3RpY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBXLTIgb3IgMTA5OSBGb3Jtczo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmVkIGFueSB3YWdlcyBvciBkaXNhYmlsaXR5IHBheW1lbnRzIHRoYXQgd2VyZSByZXBvcnRlZCBvbiBXLTIgb3IgMTA5OSBmb3JtcyBpbiB0aGUgeWVhciBvZiB5b3VyIHJldGlyZW1lbnQsIHBsZWFzZSBwcm92aWRlIHRoZXNlIGZvcm1zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGUgYWJvdmUgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB5b3VyIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cyB3aWxsIGFpZCB1cyBpbiBkZXRlcm1pbmluZyB0aGVpciB0YXhhYmlsaXR5IGFuZCBlbnN1cmluZyB0aGF0IHlvdXIgdGF4IG9ibGlnYXRpb25zIGFyZSBwcmVjaXNlbHkgY2FsY3VsYXRlZC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDbGVyZ3kgV2FnZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNsZXJneSBXYWdlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIFctMiB3YWdlcyBhcyBhIGNsZXJneSBtZW1iZXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgeW91ciBjb21wZW5zYXRpb24gcGFja2FnZS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPlctMiBGb3JtOjwvYj4gSWYgbm90IGFscmVhZHkgcHJvdmlkZWQsIGluY2x1ZGUgYW55IFctMiBmb3JtcyBpc3N1ZWQgYnkgeW91ciByZWxpZ2lvdXMgaW5zdGl0dXRpb24uPC9saT5cclxuICAgICAgICA8bGk+PGI+SG91c2luZyBBbGxvd2FuY2UgRG9jdW1lbnRhdGlvbjo8L2I+IERldGFpbGVkIHN0YXRlbWVudCBvciBsZXR0ZXIgZnJvbSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbiBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgZGVzaWduYXRlZCBhcyBob3VzaW5nIGFsbG93YW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5TZWxmLUVtcGxveW1lbnQgVGF4OjwvYj4gQ29uZmlybWF0aW9uIG9uIHdoZXRoZXIgeW91IGhhdmUgdGFrZW4gYSB2b3cgb2YgcG92ZXJ0eSAoaWYgYXBwbGljYWJsZSksIG9yIGFueSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gb3B0aW5nIG91dCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkV4cGVuc2UgUmVpbWJ1cnNlbWVudHM6PC9iPiBEb2N1bWVudGF0aW9uIHNob3dpbmcgYW55IGV4cGVuc2UgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgdW5kZXIgYW4gYWNjb3VudGFibGUgcGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5PdGhlciBDb21wZW5zYXRpb246PC9iPiBJbmZvcm1hdGlvbiBvbiBhbnkgb3RoZXIgY29tcGVuc2F0aW9uIHJlY2VpdmVkIGluIHlvdXIgY2FwYWNpdHkgYXMgY2xlcmd5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvdmUgb2ZmZXJpbmdzLCBmZWVzIGZvciBzZXJ2aWNlcyAod2VkZGluZ3MsIGZ1bmVyYWxzLCBldGMuKSwgYW5kIHBhcnNvbmFnZSBhbGxvd2FuY2VzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcHJlc2VudCB5b3VyIGVhcm5pbmdzIGFuZCB0byBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIGNvcnJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCB3aWxsIGhlbHAgZW5zdXJlIHRoYXQgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgaW4gYSB0aW1lbHkgYW5kIGVmZmljaWVudCBtYW5uZXIuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludGVyZXN0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSW50ZXJlc3QgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBmaW5hbmNpYWwgYWN0aXZpdGllcyBmb3IgdGhlIHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBpbnRlcmVzdCBpbmNvbWUuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGRldGFpbHMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PGI+U291cmNlIG9mIEludGVyZXN0IEluY29tZTo8L2I+IFBsZWFzZSBzcGVjaWZ5IHRoZSBpbnN0aXR1dGlvbihzKSBvciBlbnRpdHkoaWVzKSBmcm9tIHdoaWNoIHlvdSByZWNlaXZlZCBpbnRlcmVzdCBpbmNvbWUgKGUuZy4sIGJhbmtzLCBjcmVkaXQgdW5pb25zKS48L2xpPlxyXG4gICAgICA8bGk+PGI+QW1vdW50IFJlY2VpdmVkOjwvYj4gQ29uZmlybSB0aGUgdG90YWwgYW1vdW50IG9mIGludGVyZXN0IGluY29tZSByZWNlaXZlZCBmcm9tIGVhY2ggc291cmNlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPjxiPkFjY291bnQgVHlwZXM6PC9iPiBJZGVudGlmeSB0aGUgdHlwZSBvZiBhY2NvdW50cyB0aGF0IGdlbmVyYXRlZCB0aGUgaW50ZXJlc3QgKGUuZy4sIHNhdmluZ3MsIGNoZWNraW5nLCBjZXJ0aWZpY2F0ZXMgb2YgZGVwb3NpdCkuPC9saT5cclxuICAgICAgPGxpPjxiPlRheCBGb3JtcyBSZWNlaXZlZDo8L2I+IExpc3QgYW55IHRheCBmb3JtcyB5b3UgaGF2ZSByZWNlaXZlZCByZWxhdGVkIHRvIGludGVyZXN0IGluY29tZSwgc3VjaCBhcyBGb3JtIDEwOTktSU5UIG9yIEZvcm0gMTA5OS1PSUQuPC9saT5cclxuICAgICAgPGxpPjxiPkZvcmVpZ24gSW50ZXJlc3Q6PC9iPiBJZiBhbnkgaW50ZXJlc3QgaW5jb21lIHdhcyBlYXJuZWQgZnJvbSBmb3JlaWduIGFjY291bnRzIG9yIHNvdXJjZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMsIGluY2x1ZGluZyB0aGUgY291bnRyeSBvZiBvcmlnaW4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGVuYWJsZSB1cyB0byBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIGludGVyZXN0IGluY29tZSBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZSBhbmQgY29ycmVjdC4gWW91IGNhbiBhdHRhY2ggdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGJ5IHJlcGx5aW5nIHRvIHRoaXMgZW1haWwgb3IgdXBsb2FkaW5nIHRoZW0gZGlyZWN0bHkgdG8gb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcmV2aWV3aW5nIHlvdXIgdGF4IHNpdHVhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBhIGdpZnQgZm9yIG9wZW5pbmcgYW4gYWNjb3VudCBhdCBhIGZpbmFuY2lhbCBpbnN0aXR1dGlvbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uIHdoZXJlIHRoZSBhY2NvdW50IHdhcyBvcGVuZWQuPC9saT5cclxuICAgICAgICA8bGk+VGhlIGRhdGUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBnaWZ0IHJlY2VpdmVkIChlLmcuLCBjYXNoLCBtZXJjaGFuZGlzZSwgb3Igc2VydmljZXMpLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiB0aGUgZ2lmdCBhdCB0aGUgdGltZSBpdCB3YXMgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlIGdpZnQgKGUuZy4sIGEgbGV0dGVyLCBlbWFpbCBjb25maXJtYXRpb24sIG9yIHN0YXRlbWVudCBpbmRpY2F0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZ2lmdCkuPC9saT5cclxuICAgICAgICA8bGk+Q29uZmlybWF0aW9uIGlmIHlvdSBoYXZlIHJlY2VpdmVkIG1vcmUgdGhhbiBvbmUgZ2lmdCBmb3Igb3BlbmluZyBhY2NvdW50cyB3aXRoaW4gdGhlIHNhbWUgdGF4IHllYXIsIGFuZCBpZiBzbywgdGhlIGRldGFpbHMgZm9yIGVhY2guPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgY29tcGx5IHdpdGggYWxsIElSUyByZXF1aXJlbWVudHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNEIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDRCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBvZiB5b3VyIGluY29tZSBmcm9tIENlcnRpZmljYXRlcyBvZiBEZXBvc2l0IChDRHMpIGZvciB0aGUgdGF4IHllYXIsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaXMgZXNzZW50aWFsIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk5hbWUgb2YgdGhlIEJhbmsgb3IgRmluYW5jaWFsIEluc3RpdHV0aW9uOjwvc3Ryb25nPiBXaGVyZSB0aGUgQ0QgaXMgaGVsZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyOjwvc3Ryb25nPiBUaGlzIGhlbHBzIGluIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBDRC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIEludGVyZXN0IEVhcm5lZDo8L3N0cm9uZz4gVGhlIGFtb3VudCBvZiBpbnRlcmVzdCBlYXJuZWQgZnJvbSB0aGUgQ0QgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNEIFRlcm06PC9zdHJvbmc+IFRoZSBkdXJhdGlvbiBvciB0ZXJtIG9mIHRoZSBDRCAoZS5nLiwgNiBtb250aHMsIDEgeWVhcikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFB1cmNoYXNlOjwvc3Ryb25nPiBXaGVuIHlvdSBvcmlnaW5hbGx5IGFjcXVpcmVkIHRoZSBDRC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1hdHVyaXR5IERhdGU6PC9zdHJvbmc+IFdoZW4gdGhlIENEIHJlYWNoZWQgb3Igd2lsbCByZWFjaCBpdHMgZnVsbCB0ZXJtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1JTlQgRm9ybXM6PC9zdHJvbmc+IElmIHJlY2VpdmVkLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgYW55IDEwOTktSU5UIGZvcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ0QgaW50ZXJlc3QuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGFjY3VyYXRlIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRzLiBZb3UgbWF5IHVwbG9hZCB0aGUgZG9jdW1lbnRzIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsIG9yIHByb3ZpZGUgdGhlbSB2aWEgZW1haWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCB0YXgtZXhlbXB0IGludGVyZXN0IGR1cmluZyB0aGUgdGF4IHllYXIsIHBvc3NpYmx5IGZyb20gbXVuaWNpcGFsIGJvbmRzIG9yIHNpbWlsYXIgaW52ZXN0bWVudHMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U3RhdGVtZW50cyBvZiBUYXgtRXhlbXB0IEludGVyZXN0Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgMTA5OS1JTlQgZm9ybXMgb3IgZXF1aXZhbGVudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHlvdXIgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgSXNzdWluZyBFbnRpdGllczo8L3N0cm9uZz4gQSBsaXN0IG9yIHN0YXRlbWVudCBpZGVudGlmeWluZyB0aGUgZW50aXRpZXMgdGhhdCBpc3N1ZWQgdGhlIGJvbmRzIG9yIHNpbWlsYXIgaW52ZXN0bWVudHMuIFRoaXMgaW5jbHVkZXMgbXVuaWNpcGFsLCBzdGF0ZSwgb3IgZmVkZXJhbCBlbnRpdGllcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgRGV0YWlsOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgaW52ZXN0bWVudHMgY29udHJpYnV0aW5nIHRvIHRheC1leGVtcHQgaW50ZXJlc3QuIFRoaXMgc2hvdWxkIGluY2x1ZGUgdGhlIHB1cmNoYXNlIGRhdGUsIHB1cmNoYXNlIGFtb3VudHMsIGFuZCBhbnkgcmVsYXRlZCBtYXR1cml0eSBkYXRlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJyb2tlcmFnZSBBY2NvdW50IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgdGhhdCBkZXRhaWwgdHJhbnNhY3Rpb25zIGFuZCBob2xkaW5ncyBpbiB0YXgtZXhlbXB0IGludmVzdG1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QU1UIChBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheCkgQ29uc2lkZXJhdGlvbjo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBkb2N1bWVudGF0aW9uIGluZGljYXRpbmcgd2hldGhlciBhbnkgb2YgdGhlIHRheC1leGVtcHQgaW50ZXJlc3QgaXMgc3ViamVjdCB0byB0aGUgQWx0ZXJuYXRpdmUgTWluaW11bSBUYXguPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFuIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgY29udGludWVkIGVmZm9ydCB0byBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlcywgd2UgYXJlIHJlYWNoaW5nIG91dCB0byBnYXRoZXIgbmVjZXNzYXJ5IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgaW50ZXJlc3QgeW91IG1heSBoYXZlIHJlY2VpdmVkIGZyb20gcmVkZWVtaW5nIGFuIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L3A+XHJcblxyXG4gICAgPHA+VG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBleGVtcHRpb24gYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUywgd2Uga2luZGx5IHJlcXVlc3QgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiBGb3JtIDEwOTktSU5UIG9yIHNpbWlsYXIgc3RhdGVtZW50IHByb3ZpZGVkIGJ5IHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24sIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiBpbnRlcmVzdCByZWNlaXZlZCBmcm9tIHRoZSBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkcyBvZiB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kcyByZWRlZW1lZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Cb25kIHNlcmlhbCBudW1iZXJzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Jc3N1ZSBkYXRlczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+UmVkZW1wdGlvbiBkYXRlczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50czwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgZG9jdW1lbnRhdGlvbiBmb3IgcXVhbGlmaWVkIGVkdWNhdGlvbmFsIGV4cGVuc2VzIHBhaWQgZHVyaW5nIHRoZSB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UdWl0aW9uIGFuZCBmZWVzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3Vyc2UgbWF0ZXJpYWxzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgcmVxdWlyZWQgZXhwZW5zZXMgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgZW5yb2xsbWVudCBmcm9tIGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGZvciB0aGUgYmVuZWZpY2lhcnkgb2YgdGhlIGJvbmQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHRoZSBpbnRlcmVzdCBpbmNvbWUgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciB0YXggYmVuZWZpdHMuIFdlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgcmVjb21tZW5kIGNvbXBpbGluZyB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZSBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGl2aWRlbmQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZCBpbmNvbWUgb3ZlciB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5jb21lIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+SWYgYXBwbGljYWJsZSwgZGV0YWlscyByZWdhcmRpbmcgYW55IGZvcmVpZ24gZGl2aWRlbmRzIGluY2x1ZGluZyB0aGUgYW1vdW50IGluIGZvcmVpZ24gY3VycmVuY3ksIHRoZSBjb3VudHJ5IG9mIG9yaWdpbiwgYW5kIGFueSBmb3JlaWduIHRheCBwYWlkLjwvbGk+XHJcbiAgICAgIDxsaT5Gb3IgZGl2aWRlbmRzIHJlaW52ZXN0ZWQsIHBsZWFzZSBwcm92aWRlIHN0YXRlbWVudHMgb3IgY29uZmlybWF0aW9ucyBzaG93aW5nIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZSB0byBhdm9pZCBhbnkgcHJvY2Vzc2luZyBkZWxheXMuIFdlIHJlY29tbWVuZCBzZWN1cmVseSB1cGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsIG9yIGFycmFuZ2luZyBhIHNlY3VyZSBlbWFpbCB0cmFuc21pc3Npb24uPC9wPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNwb3NlZCBDYXBpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgZGlzcG9zaW5nIG9mIGNhcGl0YWwgYXNzZXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgY29tcGxldGUgYW5kIGNvbXBsaWFudCwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+RGVzY3JpcHRpb24gb2YgZWFjaCBkaXNwb3NlZCBhc3NldDo8L2I+IEluY2x1ZGUgdGhlIHR5cGUgb2YgYXNzZXQgKGUuZy4sIHJlYWwgZXN0YXRlLCBzdG9ja3MsIGJvbmRzKS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5BY3F1aXNpdGlvbiBjb3N0OjwvYj4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIG9yIGNvc3QgYmFzaXMgb2YgZWFjaCBhc3NldCwgaW5jbHVkaW5nIGFueSBpbXByb3ZlbWVudHMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGRpc3Bvc2FsOjwvYj4gVGhlIHNwZWNpZmljIGRhdGUgb24gd2hpY2ggZWFjaCBhc3NldCB3YXMgc29sZCwgZXhjaGFuZ2VkLCBvciBvdGhlcndpc2UgZGlzcG9zZWQgb2YuPC9saT5cclxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkFzc29jaWF0ZWQgZXhwZW5zZXM6PC9iPiBBbnkgY29zdHMgaW5jdXJyZWQgZGlyZWN0bHkgZnJvbSB0aGUgc2FsZSBvciBkaXNwb3NhbCBwcm9jZXNzLCBzdWNoIGFzIGJyb2tlcidzIGZlZXMsIGFkdmVydGlzaW5nLCBsZWdhbCBmZWVzLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVhc29uIGZvciBkaXNwb3NhbDo8L2I+IEJyaWVmbHkgZGVzY3JpYmUgdGhlIHJlYXNvbiBiZWhpbmQgdGhlIGRpc3Bvc2FsIG9mIHRoZSBhc3NldCwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgY2FsY3VsYXRpbmcgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzIGFuZCBkZXRlcm1pbmluZyB0aGVpciBpbXBhY3Qgb24geW91ciB0YXggb2JsaWdhdGlvbnMuIFBsZWFzZSBhdHRhY2ggYW55IHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBzYWxlcyByZWNlaXB0cywgZGVlZHMsIGNvbnRyYWN0cywgb3IgYnJva2VyYWdlIHN0YXRlbWVudHMsIHRvIHN1YnN0YW50aWF0ZSB0aGUgZGV0YWlscyBwcm92aWRlZC48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWF5IGhhdmUuIFlvdSBjYW4gcmVhY2ggdXMgdmlhIGVtYWlsIG9yIHBob25lIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1ESVYgRm9ybTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvbiBkaXZpZGVuZHMgYW5kIGRpc3RyaWJ1dGlvbnMgeW91IHJlY2VpdmVkIGZyb20geW91ciBtdXR1YWwgZnVuZCBpbnZlc3RtZW50cy4gUGxlYXNlIGVuc3VyZSB0byBwcm92aWRlIHRoaXMgZm9ybSBpZiB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgb24gaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5ZZWFyLUVuZCBTdW1tYXJ5Ojwvc3Ryb25nPiBPZnRlbiBtdXR1YWwgZnVuZHMgcHJvdmlkZSBhIHllYXItZW5kIHN1bW1hcnkgdG8gdGhlaXIgaW52ZXN0b3JzLiBUaGlzIHN1bW1hcnkgY2FuIGJlIHZlcnkgaGVscGZ1bCBpbiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhcyBpdCBjb25zb2xpZGF0ZXMgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBvdGhlciByZWxldmFudCBkb2N1bWVudHM6PC9zdHJvbmc+IFRoaXMgY291bGQgaW5jbHVkZSBhZGRpdGlvbmFsIDEwOTkgZm9ybXMgKGxpa2UgMTA5OS1CIGlmIGFueSBzYWxlcyBvY2N1cnJlZCksIG9yaWdpbmFsIGludmVzdG1lbnQgc3RhdGVtZW50cywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IGNvdWxkIGltcGFjdCB5b3VyIHRheCBzaXR1YXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cyBtYXkgcmVxdWlyZSBzb21lIHRpbWUsIGhvd2V2ZXIsIGhhdmluZyB0aGVzZSByZWFkaWx5IGF2YWlsYWJsZSB3aWxsIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGVmZmljaWVuY3kgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBiZSBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgZGlmZmljdWx0aWVzIG9idGFpbmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgRGlzcG9zYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIG1hZGUgYSBkaXNwb3NhbCBvZiBzaGFyZXMgaW4gYSBtdXR1YWwgZnVuZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZWQgYWNjdXJhdGVseSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgPHN0cm9uZz5yZWNvcmQgb2YgdGhlIHB1cmNoYXNlPC9zdHJvbmc+IG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMgaW5jbHVkaW5nIHRoZSBwdXJjaGFzZSBkYXRlIGFuZCBjb3N0IGJhc2lzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIGFueSBjYXBpdGFsIGdhaW4gb3IgbG9zcy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB0aGUgMTA5OS1CIGZvcm0gaXMgbm90IGF2YWlsYWJsZSwgcGxlYXNlIHByb3ZpZGUgYW55IDxzdHJvbmc+YnJva2VyYWdlIHN0YXRlbWVudHM8L3N0cm9uZz4gb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3dzIHRoZSBkaXNwb3NhbCBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzLCBpbmNsdWRpbmcgdGhlIHNhbGUgZGF0ZSBhbmQgYW1vdW50LjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SGF2aW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZSBkaXNwb3NhbCBvZiB5b3VyIG11dHVhbCBmdW5kIHNoYXJlcyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3Nlcy4gVGhpcyB3aWxsIGFsc28gaGVscCB1cyB0byBvcHRpbWl6ZSB5b3VyIHRheCBsaWFiaWxpdHkgZm9yIHRoZSB5ZWFyLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJXYXNoIFNhbGUgVHJhbnNhY3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBpbmRpY2F0aW9uIG9mIGEgcG9zc2libGUgV2FzaCBTYWxlIHRyYW5zYWN0aW9uLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHRyYW5zYWN0aW9uIHJlY29yZHM8L3N0cm9uZz4gLSBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgc2VjdXJpdHkgdGhhdCB3YXMgc29sZCBhbmQgdGhlbiByZXB1cmNoYXNlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzIGZvciBlYWNoIHRyYW5zYWN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCBiYXNpcyBmb3IgcmVwdXJjaGFzZWQgc2VjdXJpdHk8L3N0cm9uZz4gLSBEZXRhaWxzIG9mIHRoZSBjb3N0IGJhc2lzIGZvciB0aGUgc2VjdXJpdGllcyByZXB1cmNoYXNlZCB3aXRoaW4gYSA2MS1kYXkgd2luZG93ICgzMCBkYXlzIGJlZm9yZSB0byAzMCBkYXlzIGFmdGVyIHRoZSBzYWxlKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9zc2VzIHJlYWxpemVkPC9zdHJvbmc+IC0gRG9jdW1lbnRhdGlvbiBvZiBhbnkgbG9zc2VzIHJlYWxpemVkIGZyb20gdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IGNvcnJlc3BvbmRlbmNlPC9zdHJvbmc+IC0gQ29ycmVzcG9uZGVuY2UgZnJvbSBicm9rZXJzIG9yIGZpbmFuY2lhbCBhZHZpc29ycyByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb2N1bWVudHMgYXJlIG9yZ2FuaXplZCBhbmQgY2xlYXJseSBsYWJlbGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uLiBUaGlzIHdpbGwgZmFjaWxpdGF0ZSBhIHNtb290aGVyIGFuZCBxdWlja2VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB5b3VyIFdhc2ggU2FsZSB0cmFuc2FjdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBwcm92aWRlIGFjY3VyYXRlIHRheCBhZHZpY2UgYW5kIHByZXBhcmF0aW9uLiBGdXJ0aGVyLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYXNzaXN0IGluIGRldGVybWluaW5nIGhvdyB0aGUgV2FzaCBTYWxlIHJ1bGUgYWZmZWN0cyB0aGUgZGVkdWN0aWJpbGl0eSBvZiBhbnkgbG9zc2VzIHlvdSBtaWdodCBoYXZlIGluY3VycmVkLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvbGQgSG9tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU29sZCBIb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgU2FsZTo8L3N0cm9uZz4gVGhlIGNsb3NpbmcgZGF0ZSB3aGVuIHRoZSBzYWxlIHdhcyBvZmZpY2lhbGx5IGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3QgQmFzaXM6PC9zdHJvbmc+IE9yaWdpbmFsIHB1cmNoYXNlIHByaWNlLCBwbHVzIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+IEFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvZiBIb21lIEltcHJvdmVtZW50czo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gYWZmZWN0IHRoZSBjb3N0IGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgVXNlOjwvc3Ryb25nPiBJZiBub3QgYWx3YXlzIHVzZWQgYXMgYSBwZXJzb25hbCBob21lLCBkZXRhaWxzIG9uIGFueSB1c2Ugb2YgdGhlIHByb3BlcnR5IGZvciByZW50YWwsIGJ1c2luZXNzLCBvciBvdGhlciBub24tcGVyc29uYWwgdXNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggYmVuZWZpdHMgb3Igb2JsaWdhdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBzb2xkIHByb3BlcnR5IHRoaXMgeWVhciB1bmRlciBhbiBpbnN0YWxsbWVudCBwbGFuLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIHRyYW5zYWN0aW9uIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TYWxlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBjb21wbGV0ZSBzYWxlIGFncmVlbWVudCBkZXRhaWxpbmcgdGhlIHRlcm1zIG9mIHRoZSBpbnN0YWxsbWVudCBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQgKGUuZy4sIGxhbmQsIGJ1aWxkaW5nLCBlcXVpcG1lbnQpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRvdGFsIGFtb3VudHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGRvd24gcGF5bWVudCBhbmQgYW55IGluc3RhbGxtZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJpbmNpcGFsICZhbXA7IEludGVyZXN0IEJyZWFrZG93bjo8L3N0cm9uZz4gQSBicmVha2Rvd24gb2YgdGhlIGFtb3VudHMgcmVjZWl2ZWQgYmV0d2VlbiBwcmluY2lwYWwgYW5kIGludGVyZXN0IGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSByZWxldmFudCBleHBlbnNlcyBpbiByZWxhdGlvbiB0byB0aGUgc2FsZSB0aGF0IG1pZ2h0IGJlIGRlZHVjdGlibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CdXllciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTGVnYWwgbmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBidXllci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcHJvZml0IG9yIGxvc3MgZnJvbSB0aGUgc2FsZSBhbmQgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGUgaW5zdGFsbG1lbnQgcGF5bWVudHMgcmVjZWl2ZWQuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgdGhlbSB0byB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20uPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgdGhlIFNlY3VyaXR5Ojwvc3Ryb25nPiBGdWxsIG5hbWUgYW5kIHR5cGUgb2YgZWFjaCBzZWN1cml0eSB0aGF0IGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Xb3J0aGxlc3NuZXNzIERldGVybWluYXRpb24gRGF0ZTo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgZGV0ZXJtaW5lZCB0aGUgc2VjdXJpdHkgdG8gYmUgd29ydGhsZXNzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24geW91IHJlY2VpdmVkIG9yIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGludmVzdG1lbnRzIGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHlvdXIgaW52ZXN0bWVudCBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgd29ydGhsZXNzIHNlY3VyaXRpZXMgYW5kIHRoZWlyIHZhbHVlIG92ZXIgdGltZSwgbGVhZGluZyB1cCB0byB0aGVpciBkZWNsYXJlZCB3b3J0aGxlc3NuZXNzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTI0NCBCdXNpbmVzcyBTdG9ja1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjQ0IEJ1c2luZXNzIFN0b2NrXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+Y2VydGlmaWNhdGUgb2YgaW5jb3Jwb3JhdGlvbjwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgdGhlIHN0b2NrIHF1YWxpZmllcyBhcyBTZWN0aW9uIDEyNDQgc3RvY2suPC9saT5cclxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IGFuZCBkYXRlIG9mIHRoZSBvcmlnaW5hbCBpbnZlc3RtZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Qcm9vZiBvZiBiZWluZyBhbiBvcmlnaW5hbCBob2xkZXIuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgdGhlIHNhbGU8L3N0cm9uZz4sIHNwZWNpZnlpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OdW1iZXIgb2Ygc2hhcmVzIHNvbGQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5TYWxlIHByaWNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gYXNzZXNzIHRoZSBlbGlnaWJpbGl0eSBmb3IgYSBiZW5lZmljaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LCBwb3RlbnRpYWxseSBtaW5pbWl6aW5nIHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgVHJhbnNhY3Rpb25zOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VHlwZSBvZiB0cmFuc2FjdGlvbnMgKGUuZy4sIHNhbGUsIHRyYWRlLCB0cmFuc2ZlciBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cykuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlKHMpIG9mIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lcyBhbmQgcmVsYXRpb25zaGlwcyB0byB5b3UgKGUuZy4sIGZhbWlseSBtZW1iZXIsIGZyaWVuZCwgb3IgYnVzaW5lc3MgZW50aXR5KS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1hcmtldCB2YWx1ZSBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cyBhdCB0aGUgdGltZSBvZiB0cmFuc2FjdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGV4Y2hhbmdlIG9mIGdvb2RzLCBzZXJ2aWNlcywgb3Igb3RoZXIgYXNzZXRzLCBpbmNsdWRpbmcgdGhlaXIgZmFpciBtYXJrZXQgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWNlaXB0cyBvciBwcm9vZiBvZiBwYXltZW50L2V4Y2hhbmdlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QXBwcmFpc2FscyBvciB2YWx1YXRpb25zIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyMSBIb21lIFNhbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTIxIEhvbWUgU2FsZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIFNhbGU6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2Ygc2FsZTwvbGk+XHJcbiAgICAgICAgICA8bGk+U2VsbGluZyBwcmljZTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBwdXJjaGFzZTwvbGk+XHJcbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxyXG4gICAgICAgICAgPGxpPlJlY29yZHMgb2YgaW1wcm92ZW1lbnRzIG1hZGUgKHdpdGggZGF0ZXMgYW5kIGNvc3RzKTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IGNhc3VhbHR5IGxvc3NlcyBjbGFpbWVkIGFuZCBpbnN1cmFuY2UgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgd2hpbGUgb3duaW5nIHRoZSBwcm9wZXJ0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzaWRlbmN5IGFuZCBVc2UgRGF0YTo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VG90YWwgeWVhcnMgb2Ygb3duZXJzaGlwPC9saT5cclxuICAgICAgICAgIDxsaT5Ub3RhbCB5ZWFycyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYXMgeW91ciBtYWluIGhvbWU8L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB0aGF0IG1heSBxdWFsaWZ5IGZvciBhbiBleGNlcHRpb24gdG8gdGhlIHBoeXNpY2FsIHByZXNlbmNlIHJlcXVpcmVtZW50IChlLmcuLCBoZWFsdGggaXNzdWVzLCBlbXBsb3ltZW50IGNoYW5nZXMpPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmlvciBHYWluIEV4Y2x1c2lvbnM6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cclxuICAgICAgICAgIDxsaT5JZiB5ZXMsIGRldGFpbHMgb2YgdGhlIHByaW9yIHNhbGUgaW5jbHVkaW5nIGRhdGUgYW5kIGFtb3VudCBvZiBnYWluIGV4Y2x1ZGVkPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHRpbWVseSBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMDMxIEV4Y2hhbmdlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gSW4gcmV2aWV3aW5nIHlvdXIgcmVjb3JkcywgaXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSBtYXkgaGF2ZSBlbmdhZ2VkIGluIGEgU2VjdGlvbiAxMDMxIGV4Y2hhbmdlLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCByZWxldmFudCBJUlMgZ3VpZGVsaW5lcywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBib3RoIHRoZSByZWxpbnF1aXNoZWQgcHJvcGVydHkgYW5kIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eS4gUGxlYXNlIGluY2x1ZGUgbG9jYXRpb24sIHR5cGUgb2YgcHJvcGVydHkgKGUuZy4sIGNvbW1lcmNpYWwsIHJlc2lkZW50aWFsKSwgYW5kIGFueSBpZGVudGlmeWluZyBudW1iZXJzIChlLmcuLCBwYXJjZWwgbnVtYmVyKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+VHJhbnNhY3Rpb24gVmFsdWVzOjwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYm90aCB0aGUgcmVsaW5xdWlzaGVkIGFuZCByZXBsYWNlbWVudCBwcm9wZXJ0aWVzIGF0IHRoZSB0aW1lIG9mIHRoZSBleGNoYW5nZSwgYWxvbmcgd2l0aCBhbnkgZmluYW5jaWFsIGFkanVzdG1lbnRzIG9yIGFkZGl0aW9uYWwgY2FzaCByZWNlaXZlZC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIGFueSBwb3RlbnRpYWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkludGVybWVkaWFyeSBEZXRhaWxzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCBhbnkgcXVhbGlmaWVkIGludGVybWVkaWFyeSB1c2VkIGR1cmluZyB0aGUgZXhjaGFuZ2UsIGluY2x1ZGluZyB0aGVpciBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgZGV0YWlscyBvZiB0aGVpciBpbnZvbHZlbWVudC4gSWYgbm8gaW50ZXJtZWRpYXJ5IHdhcyB1c2VkLCBwbGVhc2UgZXhwbGFpbiBob3cgdGhlIGV4Y2hhbmdlIHdhcyBmYWNpbGl0YXRlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgb3IgRXhwZW5zZXM6PC9zdHJvbmc+IERldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eSB3aXRoaW4gdGhlIGV4Y2hhbmdlIHBlcmlvZCBvciBhbnkgYWRkaXRpb25hbCBleHBlbnNlcyBpbmN1cnJlZCB0aGF0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgcHJvcGVydHkncyBiYXNpcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscy4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IG1heSBoYXZlIHVuZGVyZ29uZSBhIFNlY3Rpb24gMTAzMyBleGNoYW5nZSAoaW52b2x1bnRhcnkgY29udmVyc2lvbikgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBtYXhpbXVtIGNvbXBsaWFuY2UgYW5kIGJlbmVmaXQgZm9yIHlvdSwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBldmVudC4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgSW52b2x1bnRhcnkgQ29udmVyc2lvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGxlZCB0byB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiAoZS5nLiwgbmF0dXJhbCBkaXNhc3RlciwgdGhlZnQsIGNvbmRlbW5hdGlvbikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgUHJvY2VlZHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IEluZGljYXRlIHRoZSBhbW91bnQgb2YgYW55IGluc3VyYW5jZSBwcm9jZWVkcyByZWNlaXZlZCBhcyBjb21wZW5zYXRpb24gZm9yIHRoZSBjb252ZXJzaW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UaW1lbGluZSBvZiBFdmVudHM6PC9zdHJvbmc+IFByb3ZpZGUgYSB0aW1lbGluZSBvZiB0aGUga2V5IGV2ZW50cywgZnJvbSB0aGUgZGF0ZSBvZiB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiB0byB0aGUgcmVpbnZlc3RtZW50IG9mIHByb2NlZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQXR0YWNoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgaW5zdXJhbmNlIHNldHRsZW1lbnQgc3RhdGVtZW50cywgcHVyY2hhc2UgY29udHJhY3RzIGZvciByZXBsYWNlbWVudCBwcm9wZXJ0eSwgb3Igb2ZmaWNpYWwgbm90aWNlcyBvZiBjb25kZW1uYXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdG8gZmFjaWxpdGF0ZSBhbiBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWlnaHQgaGF2ZSByZWdhcmRpbmcgdGhpcyByZXF1ZXN0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkkgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXhlcywgd2Ugbm90aWNlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHJlbnRhbCBpbmNvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBleHBsb3JlIHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIG5lZWQgc29tZSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIHJlbnRhbCBpbmNvbWUuPC9wPlxyXG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPlRoZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSBnZW5lcmF0aW5nIHRoZSByZW50YWwgaW5jb21lLjwvbGk+XHJcbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gIDxsaT5Nb250aHMgdGhlIHByb3BlcnR5IHdhcyByZW50ZWQgb3V0LjwvbGk+XHJcbiAgPGxpPkFueSBwZXJpb2RzIG9mIHBlcnNvbmFsIHVzZSBvZiB0aGUgcmVudGFsIHByb3BlcnR5LjwvbGk+XHJcbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cclxuICA8bGk+RGV0YWlscyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG9yIHJlbm92YXRpb25zIGRvbmUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XHJcbjxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHRoZXJlJ3MgYW55IG90aGVyIHdheSBJIGNhbiBhc3Npc3QsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBnZXQgaW4gdG91Y2guPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBhZHZhbmNlZCByZW50IHJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgc3VtIHRvdGFsIG9mIGFsbCByZW50IHBheW1lbnRzIHJlY2VpdmVkIGluIGFkdmFuY2UgKGNvdmVyaW5nIGZ1dHVyZSBwZXJpb2RzIGJleW9uZCB0aGUgY3VycmVudCBtb250aCkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIHBlcmlvZCBjb3ZlcmVkOjwvc3Ryb25nPiBUaGUgcmFuZ2Ugb2YgZGF0ZXMgKHN0YXJ0IGFuZCBlbmQpIHRoYXQgZWFjaCBhZHZhbmNlZCByZW50IHBheW1lbnQgY292ZXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgYWRkcmVzczo8L3N0cm9uZz4gVGhlIGFkZHJlc3Mgb2YgdGhlIHJlbnRhbCBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGFkdmFuY2VkIHJlbnQgd2FzIHBhaWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBwYXJ0aWFsIHJlZnVuZHMgaXNzdWVkOjwvc3Ryb25nPiBJZiBhbnkgcmVmdW5kcyB3ZXJlIGlzc3VlZCBhZ2FpbnN0IHRoZSBhZHZhbmNlZCByZW50cyByZWNlaXZlZCwgcGxlYXNlIHByb3ZpZGUgZGV0YWlscyBhbmQgcmVzcGVjdGl2ZSBhbW91bnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGVhc2UgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMZWFzZSBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5MZWFzZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgb3JpZ2luYWwgbGVhc2UgYWdyZWVtZW50IHdpdGggdGhlIHRlbmFudCB3aG8gcGFpZCB0byB0ZXJtaW5hdGUgdGhlaXIgbGVhc2UgZWFybHkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBheW1lbnQgUmVjb3Jkczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvZiB0aGUgcGF5bWVudCByZWNlaXZlZCBmb3IgbGVhc2UgdGVybWluYXRpb24uIFRoaXMgY291bGQgaW5jbHVkZSBiYW5rIHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb24sIGEgcmVjZWlwdCBwcm92aWRlZCB0byB0aGUgdGVuYW50LCBvciBhbnkgd3JpdHRlbiBhZ3JlZW1lbnQgc3BlY2lmeWluZyB0aGUgYW1vdW50LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gRXZpZGVuY2U6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBjb21tdW5pY2F0aW9uIGJldHdlZW4geW91IGFuZCB0aGUgdGVuYW50IHJlZ2FyZGluZyB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIGFuZCB0aGUgYWdyZWVtZW50IHRvIHRlcm1pbmF0ZSBlYXJseSwgaW5jbHVkaW5nIGVtYWlscyBvciBsZXR0ZXJzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlc2UgZG9jdW1lbnRzIGFyZSBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCB0YXggdHJlYXRtZW50IG9mIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gcGF5bWVudCB5b3UgcmVjZWl2ZWQuIFRoZXkgd2lsbCBoZWxwIHRvIGVuc3VyZSB0aGF0IHdlIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5IGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMuPC9wPlxyXG4gICAgPHA+PHN0cm9uZz5BY3Rpb24gUmVxdWlyZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLCBidXQgbm8gbGF0ZXIgdGhhbiBbc3BlY2lmaWMgZHVlIGRhdGVdLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb24uIFlvdSBtYXkgc2VuZCB0aGVtIHZpYSBlbWFpbCBhdCBbeW91ciBlbWFpbCBhZGRyZXNzXSwgdXBsb2FkIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLCBvciBicmluZyB0aGVtIHRvIG91ciBvZmZpY2UgaW4gcGVyc29uLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYWlkIEFkdmFuY2UgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhaWQgQWR2YW5jZSBFeHBlbnNlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgcGF5bWVudHMgZm9yIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGNvc3RzIHJlbGF0ZWQgdG8geW91ciByZW50YWwgcHJvcGVydHksIHdoaWNoIGNvdmVyIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMgaW4geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuPG9sPlxyXG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgUGFpZCBFeHBlbnNlczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgY29udHJhY3RzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgaW5zdXJhbmNlIHByZW1pdW1zIG9yIHNpbWlsYXIgZXhwZW5zZXMuIFRoaXMgc2hvdWxkIGNsZWFybHkgaW5kaWNhdGUgdGhlIGFtb3VudCBwYWlkLCB0aGUgZGF0ZSBvZiBwYXltZW50LCBhbmQgdGhlIGNvdmVyYWdlIHBlcmlvZC48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkNvdmVyYWdlIFBlcmlvZCBEZXRhaWxzOjwvc3Ryb25nPiBXZSBuZWVkIHNwZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb3ZlcmFnZSBwZXJpb2QgZm9yIGVhY2ggZXhwZW5zZS4gUGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvciBhIHdyaXR0ZW4gc3VtbWFyeSB0aGF0IHNwZWNpZmllcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgY292ZXJhZ2UgcGVyaW9kcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGN1cnJlbnQgeWVhci48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlByb3BlcnR5IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhZGRyZXNzIG9yIGlkZW50aWZpY2F0aW9uIG9mIHRoZSByZW50YWwgcHJvcGVydHkoaWVzKSB0byB3aGljaCB0aGVzZSBleHBlbnNlcyBhcHBseS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlB1cnBvc2Ugb2YgdGhlIEV4cGVuc2U6PC9zdHJvbmc+IEZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBwcm92aWRlIGEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UgKGUuZy4sIHByb3BlcnR5IGluc3VyYW5jZSwgbGlhYmlsaXR5IGluc3VyYW5jZSkuPC9saT5cclxuPC9vbD5cclxuPHA+UGxlYXNlIHJlbWVtYmVyIHRoYXQgaGF2aW5nIGFjY3VyYXRlIGFuZCBjb21wcmVoZW5zaXZlIGRvY3VtZW50YXRpb24gd2lsbCBhaWQgaW4gZW5zdXJpbmcgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBjb3JyZWN0bHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gdGF4IGJlbmVmaXRzIHJlbGF0ZWQgdG8gdGhlc2UgcHJlcGFpZCBleHBlbnNlcy48L3A+XHJcbjxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgeW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gaW4gcHJvdmlkaW5nIG5lY2Vzc2FyeSBkb2N1bWVudHMgZm9yIHRheCBwcmVwYXJhdGlvbi4gXHJcbiAgICBBcyBwZXIgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHBheW1lbnQgZm9yIGxvY2FsIGltcHJvdmVtZW50cyBcclxuICAgIG9yIHNlcnZpY2VzIHRoYXQgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHlvdXIgcmVudGFsIHByb3BlcnR5LCBcclxuICAgIHdlIG5lZWQgZnVydGhlciBkZXRhaWxzIHRvIGVuc3VyZSB0aGUgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudGF0aW9uLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIHByb3ZpZGVkIChlLmcuLCBzdHJlZXQgcmVwYWlycywgbmV3IHNpZGV3YWxrcykuPC9saT5cclxuICAgICAgICA8bGk+RGF0ZShzKSBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZS48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2UgKHJlY2VpcHRzLCBiYW5rIHN0YXRlbWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBub3RpY2VzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgbG9jYWwgbXVuaWNpcGFsaXR5IHJlZ2FyZGluZyB0aGUgaW1wcm92ZW1lbnRzIG9yIGNoYXJnZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiBob3cgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2Ugc3BlY2lmaWNhbGx5IGJlbmVmaXRlZCB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyBwb3RlbnRpYWwgdGF4IGRlZHVjdGlvbnMgb3IgY3JlZGl0cyBhc3NvY2lhdGVkIHdpdGggcHJvcGVydHkgdmFsdWUgaW5jcmVhc2VzIGR1ZSB0byBsb2NhbCBpbXByb3ZlbWVudHMgb3Igc2VydmljZXMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZS4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZCB0byBmYWNpbGl0YXRlIHRoZSB0aW1lbHkgY29tcGxldGlvbiBvZiB5b3VyIHRheCBkb2N1bWVudGF0aW9uLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmZlaXRlZCBTZWN1cml0eSBEZXBvc2l0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxpYW50LCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBoYXZpbmcgb25lIG9yIG1vcmUgdGVuYW50cyB3aG8gZGlkIG5vdCBnZXQgdGhlaXIgc2VjdXJpdHkgZGVwb3NpdCBiYWNrIHRoaXMgeWVhciBkdWUgdG8gZWl0aGVyIGJyZWFraW5nIHRoZSBsZWFzZSB0ZXJtcyBvciBsZWF2aW5nIGRhbWFnZSByZXF1aXJpbmcgcmVwYWlyLjwvcD5cclxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT5BIGxpc3Qgb2YgZWFjaCB0ZW5hbnQgd2hvc2Ugc2VjdXJpdHkgZGVwb3NpdCB3YXMgZm9yZmVpdGVkLCBpbmNsdWRpbmc6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VGVuYW50J3MgbmFtZTwvbGk+XHJcbiAgICAgICAgICA8bGk+UmVudGFsIGFkZHJlc3M8L2xpPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2YgbGVhc2UgdGVybWluYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIGNvbW11bmljYXRpb24gZXZpZGVuY2luZyB0aGUgZm9yZmVpdHVyZSByZWFzb24sIHN1Y2ggYXM6PC9saT5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50IHNob3dpbmcgdGhlIGJyZWFjaGVkIHRlcm1zPC9saT5cclxuICAgICAgICAgIDxsaT5QaG90b3Mgb3IgcmVwYWlyIGludm9pY2VzIGZvciBkYW1hZ2VzIGNhdXNlZCBieSB0aGUgdGVuYW50PC9saT5cclxuICAgICAgICAgIDxsaT5Bbnkgd3JpdHRlbiBub3RpY2VzIHByb3ZpZGVkIHRvIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBmb3JmZWl0dXJlPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBlYWNoIGZvcmZlaXRlZCBzZWN1cml0eSBkZXBvc2l0LjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgcmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIHJlYXNvbnMgZm9yIHNlY3VyaXR5IGRlcG9zaXQgZm9yZmVpdHVyZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhpcyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZCBpbiBhIGNsZWFyIGFuZCBvcmdhbml6ZWQgbWFubmVyIHRvIGZhY2lsaXRhdGUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uLUNhc2ggUmVudFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uLUNhc2ggUmVudFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2Ugbm90ZSBmcm9tIHlvdXIgZWFybGllciByZXNwb25zZXMgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBub24tY2FzaCBmb3JtcyBvZiBwYXltZW50IGluIGxpZXUgb2YgcmVudCB0aGlzIHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoZXNlIHRyYW5zYWN0aW9ucy4gS2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBTZXJ2aWNlIG9yIEdvb2RzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgeW91IHJlY2VpdmVkIGFzIHJlbnQgcGF5bWVudC4gRm9yIGluc3RhbmNlLCBcIlJlcGFpciBzZXJ2aWNlcyBmb3IgdGhlIGtpdGNoZW4gcGx1bWJpbmdcIiBvciBcImEgbGFwdG9wIGNvbXB1dGVyXCIuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlZhbHVlIEVzdGltYXRpb246PC9zdHJvbmc+IEFuIGVzdGltYXRlZCB2YWx1ZSBvZiB0aGUgc2VydmljZSwgZ29vZHMsIG9yIHByb3BlcnR5IHJlY2VpdmVkIGF0IHRoZSB0aW1lIG9mIHRoZSB0cmFuc2FjdGlvbi4gSWYgcG9zc2libGUsIGluY2x1ZGUgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGlzIHZhbHVhdGlvbiwgc3VjaCBhcyByZWNlaXB0cywgaW52b2ljZXMsIG9yIHdyaXR0ZW4gYWdyZWVtZW50cy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGF0ZShzKSBvZiBUcmFuc2FjdGlvbjo8L3N0cm9uZz4gU3BlY2lmaWMgZGF0ZShzKSB3aGVuIHlvdSByZWNlaXZlZCB0aGVzZSBnb29kcyBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SW5mb3JtYXRpb24gYWJvdXQgdGhlIFRlbmFudCBvciBQcm92aWRlcjo8L3N0cm9uZz4gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGFncmVlbWVudHMgb3IgY29udHJhY3RzIHRoYXQgb3V0bGluZSB0aGlzIGFycmFuZ2VtZW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5SZWNlaXB0cyBvciBEb2N1bWVudGF0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbjo8L3N0cm9uZz4gQW55IHJlY2VpcHRzLCBpbnZvaWNlcywgb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB0aGUgZXhjaGFuZ2UuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cyBhbmQgYWNjdXJhdGVseSByZWZsZWN0aW5nIHlvdXIgaW5jb21lLiBZb3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBncmVhdGx5IGFzc2lzdCBpbiBjb21wbGV0aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCBvdXIgb2ZmaWNlLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBQcm9wZXJ0eSBEZXByZWNpYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBQcm9wZXJ0eSBEZXByZWNpYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGFjY291bnRzLCB3ZSd2ZSBub3RlZCB0aGF0IGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQgYXMgcGFydCBvZiB0aGVpciB0YXggdHJlYXRtZW50IGluIG91ciBmaW5hbmNpYWwgcmVjb3Jkcy4gVGhpcyBtZXRob2QgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgZmluYW5jaWFsIHJlcG9ydGluZyBhbmQgdGF4IGVmZmljaWVuY3kuIEhvd2V2ZXIsIGl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB0aGVyZSBtYXkgYmUgZGlzY3JlcGFuY2llcyBvciB1cGRhdGVzIHJlcXVpcmVkIGluIG91ciByZWNvcmRzIHJlZ2FyZGluZyB0aGUgZGVwcmVjaWF0aW9uIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxyXG4gICAgPHA+VG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgZmluYW5jaWFsIGFuZCB0YXggcmVwb3J0aW5nLCB3ZSBraW5kbHkgcmVxdWVzdCB5b3VyIGFzc2lzdGFuY2UgaW4gdmVyaWZ5aW5nIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIHdpdGggcmVnYXJkcyB0byBkZXByZWNpYXRpb24uPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPkNvbmZpcm0gd2hldGhlciBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgYmVpbmcgZGVwcmVjaWF0ZWQgaW4gb3VyIGJvb2tzLiBJZiB0aGlzIGlzIGFjY3VyYXRlLCBubyBhY3Rpb24gaXMgcmVxdWlyZWQgb24geW91ciBwYXJ0LjwvbGk+XHJcbiAgICA8bGk+SWYgdGhlcmUgYXJlIGFueSByZW50YWwgcHJvcGVydGllcyA8c3Ryb25nPm5vdDwvc3Ryb25nPiBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBmb3IgZWFjaCBwcm9wZXJ0eTo8L2xpPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPlByb3BlcnR5IEFkZHJlc3M8L2xpPlxyXG4gICAgICAgICAgICA8bGk+RGF0ZSBvZiBQdXJjaGFzZTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5QdXJjaGFzZSBQcmljZTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5SZWFzb24gZm9yIE5vbi1EZXByZWNpYXRpb248L2xpPlxyXG4gICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcmVsZXZhbnQgaW5mb3JtYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0IGlzIGhpZ2hseSBhcHByZWNpYXRlZCBhbmQgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHlvdXIgZmluYW5jaWFsIHJlY29yZHMgYWNjdXJhdGVseSByZWZsZWN0IHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBieSBbSW5zZXJ0IERlYWRsaW5lIEhlcmVdIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcmV2aXNpb25zIGFuZCB1cGRhdGVzIGFzIG5lY2Vzc2FyeS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IGluIG1haW50YWluaW5nIHByZWNpc2UgYW5kIGNvbXBsaWFudCBmaW5hbmNpYWwgcmVjb3Jkcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBSZXBhaXJzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgUmVwYWlyc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgbmVjZXNzYXJ5IHJlcGFpcnMgdG8geW91ciByZW50YWwgcHJvcGVydHkgdG8ga2VlcCBpdCBpbiBnb29kIHdvcmtpbmcgY29uZGl0aW9uLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBleHBlbnNlcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSB0YXggYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYWxsIHJlcGFpcnMgbWFkZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBQbGVhc2UgaW5jbHVkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBuYXR1cmUgb2YgZWFjaCByZXBhaXIgKGUuZy4sIGZpeGluZyBsZWFrcywgcGFpbnRpbmcsIHJlcGFpcmluZyBhcHBsaWFuY2VzKS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBkYXRlIGVhY2ggcmVwYWlyIHdhcyBjb21wbGV0ZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgbG9jYXRpb24vYWRkcmVzcyBvZiB0aGUgcHJvcGVydHkgd2hlcmUgcmVwYWlycyB3ZXJlIG1hZGUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgZWFjaCByZXBhaXIgbWFkZS4gVGhpcyBzaG91bGQgaW5jbHVkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBzZXJ2aWNlIHByb3ZpZGVy4oCZcyBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGZvciBlYWNoIHJlcGFpci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIG1ldGhvZCBvZiBwYXltZW50IHVzZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhbnkgcmVwYWlycyB3ZXJlIG1hZGUgYnkgeW91cnNlbGYgb3IgYW4gdW5saWNlbnNlZCBjb250cmFjdG9yLCBwbGVhc2UgcHJvdmlkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGNvc3Qgb2YgbWF0ZXJpYWxzIHB1cmNoYXNlZCwgc3VwcG9ydGVkIGJ5IHJlY2VpcHRzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGVzdGltYXRlZCBudW1iZXIgb2YgaG91cnMgc3BlbnQgb24gZWFjaCByZXBhaXIsIGFsb25nIHdpdGggYSByZWFzb25hYmxlIGhvdXJseSByYXRlIGZvciBsYWJvci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgcmVsYXRlZCB0byBwcm9wZXJ0eSByZXBhaXIgZXhwZW5zZXMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbXByb3ZlbWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBJbXByb3ZlbWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIG1hZGUgdXBncmFkZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhlc2UgaW1wcm92ZW1lbnRzIGludG8geW91ciB0YXggZG9jdW1lbnRhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBFYWNoIEltcHJvdmVtZW50Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggdXBncmFkZSBvciBlbmhhbmNlbWVudCBtYWRlIHRvIHRoZSBwcm9wZXJ0eS4gVGhpcyBjb3VsZCBpbmNsdWRlIHJlbm92YXRpb25zLCBhZGRpdGlvbnMsIG9yIGFueSB1cGdyYWRlcyB0aGF0IGhhdmUgaW5jcmVhc2VkIGl0cyB2YWx1ZSwgZXh0ZW5kZWQgaXRzIGxpZmVzcGFuLCBvciBhZGFwdGVkIGl0IHRvIG5ldyB1c2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSBvciByYW5nZSBvZiBkYXRlcyB3aGVuIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBzdGFydGVkIGFuZCBjb21wbGV0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0cyBJbnZvbHZlZDo8L3N0cm9uZz4gRGV0YWlsZWQgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIGltcHJvdmVtZW50IHByb2plY3QuIFRoaXMgaW5jbHVkZXMgbWF0ZXJpYWxzLCBsYWJvciwgcGVybWl0cywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb3N0cy4gUGxlYXNlIHByb3ZpZGUgaXRlbWl6ZWQgcmVjZWlwdHMgb3IgaW52b2ljZXMgaWYgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gQ29waWVzIG9mIGNhbmNlbGxlZCBjaGVja3MsIGJhbmsgc3RhdGVtZW50cywgb3IgZWxlY3Ryb25pYyBwYXltZW50IGNvbmZpcm1hdGlvbnMgdGhhdCBwcm92ZSBwYXltZW50IGZvciB0aGUgaW1wcm92ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmVmb3JlIGFuZCBBZnRlciBQaWN0dXJlczo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBwaG90b2dyYXBocyBvZiB0aGUgcHJvcGVydHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZS4gVGhpcyBoZWxwcyBpbiBzdWJzdGFudGlhdGluZyB0aGUgZW5oYW5jZW1lbnQgdG8geW91ciBwcm9wZXJ0eSdzIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udHJhY3RvciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgY29udHJhY3RvcnMgd2VyZSB1c2VkLCBwbGVhc2UgcHJvdmlkZSB0aGVpciBidXNpbmVzcyBuYW1lcywgYWRkcmVzc2VzLCBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wdXRpbmcgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGJlbmVmaXRzIHRoYXQgbWF5IGJlIGFwcGxpY2FibGUgdG8geW91IGFzIGEgcmVzdWx0IG9mIHRoZXNlIHByb3BlcnR5IGltcHJvdmVtZW50cy4gUGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBnYXRoZXJlZCBhbmQgc3VibWl0dGVkIGJ5IFtzcGVjaWZpYyBkYXRlXSwgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBBY3Rpdml0eSBQYXJ0aWNpcGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgd2UgbW92ZSBmb3J3YXJkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24sIGl0IGhhcyBiZWNvbWUgbmVjZXNzYXJ5IHRvIGNvbGxlY3QgYSBiaXQgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBhY3RpdmUgcGFydGljaXBhdGlvbiBpbiByZW50YWwgcHJvcGVydHkgYWN0aXZpdGllcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBwYXNzaW5nIHNwZWNpZmljIHRheCB0ZXN0cyB0aGF0IGFwcGx5IHRvIGluZGl2aWR1YWxzIGFjdGl2ZWx5IGludm9sdmVkIGluIHRoZWlyIHJlbnRhbCBwcm9wZXJ0aWVzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBkZXRhaWxzIHRvIGVuc3VyZSB3ZSBtZWV0IGFsbCByZXF1aXJlbWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB5b3VyIGFjdGl2ZSByb2xlcyB0aGlzIHRheCB5ZWFyLiBUaGlzIGluY2x1ZGVzIG1ha2luZyBkZWNpc2lvbnMgc3VjaCBhcyBhcHByb3ZpbmcgbmV3IHRlbmFudHMsIHNldHRpbmcgcmVudGFsIHRlcm1zLCBvciBhdXRob3JpemluZyByZXBhaXJzIGFuZCBtYWludGVuYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRpbWUgU3BlbnQ6PC9zdHJvbmc+IEFuIGVzdGltYXRlZCBudW1iZXIgb2YgaG91cnMgeW91IHBlcnNvbmFsbHkgc3BlbnQgb24gYWN0aXZpdGllcyByZWxhdGVkIHRvIHRoZSBtYW5hZ2VtZW50IGFuZCBkZWNpc2lvbi1tYWtpbmcgb2YgeW91ciByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgTWFuYWdlbWVudCBFbmdhZ2VtZW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgZW5nYWdlZCB3aXRoIGEgcHJvcGVydHkgbWFuYWdlciwgYSBkZXNjcmlwdGlvbiBvZiB0aGVpciByb2xlIHZlcnN1cyB0aGUgdGFza3MgeW91IHBlcnNvbmFsbHkgaGFuZGxlIHdvdWxkIGJlIGhlbHBmdWwuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZWFsIEVzdGF0ZSBQcm9mZXNzaW9uYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlYWwgRXN0YXRlIFByb2Zlc3Npb25hbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIEFubnVhbCBXb3JraW5nIEhvdXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIHN1bW1hcnkgb2YgeW91ciB0b3RhbCB3b3JraW5nIGhvdXJzIHRoaXMgeWVhciwgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGhvdXJzIGRlZGljYXRlZCB0byByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkxpc3Qgb2YgUHJvcGVydGllczo8L3N0cm9uZz4gQSBsaXN0IG9mIHByb3BlcnRpZXMgeW91IGhhdmUgbWFuYWdlZCwgc29sZCwgb3IgYXJlIGN1cnJlbnRseSBzZWxsaW5nLCBpbmNsdWRpbmcgdGhlaXIgbG9jYXRpb24gYW5kIHRoZSBuYXR1cmUgb2YgeW91ciBpbnZvbHZlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgSm9iIERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIG91dGxpbmUgb2YgeW91ciByb2xlKHMpIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMsIHNwZWNpZnlpbmcgd2hldGhlciB5b3VyIGludm9sdmVtZW50IGlzIHByaW1hcmlseSBhcyBhIGJyb2tlciwgYWdlbnQsIHByb3BlcnR5IG1hbmFnZXIsIGV0Yy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Q2FsZW5kYXIgb3IgU2NoZWR1bGU6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYSBjYWxlbmRhciBvciBzY2hlZHVsZSByZWZsZWN0aW5nIHlvdXIgcmVhbCBlc3RhdGUgYWN0aXZpdGllcyB0aHJvdWdob3V0IHRoZSB5ZWFyIHRvIGhlbHAgY29ycm9ib3JhdGUgdGhlIHRpbWUgc3BlbnQgaW4gdGhlc2UgYWN0aXZpdGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYnkgW2luc2VydCBzcGVjaWZpYyBkYXRlIGhlcmVdIHRvIGF2b2lkIGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFJlbnRhbCBQcm9wZXJ0eVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyBrbm93IHRoYXQgeW91IHJlbnRlZCBvdXQgYSBwb3J0aW9uIG9mIHlvdXIgcHJvcGVydHkgdGhpcyB0YXggeWVhciB3aGlsZSB1c2luZyB0aGUgcmVzdCBmb3IgcGVyc29uYWwgcHVycG9zZXMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGJlc3QgdGF4IGFkdmFudGFnZXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBwYXJ0aWFsIHJlbnRhbCBwcm9wZXJ0eTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkNvbXBsZXRlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIHJlbnRlZCBwb3J0aW9uIGFuZCB0aGUgcGVyc29uYWwgdXNlIHBvcnRpb24uPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3B5IG9mIHRoZSByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+U3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgcmVudGFsIHBlcmlvZCB3aXRoaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgSW5jb21lOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgcmVudGFsIGluY29tZSByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGV0YWlscyBvZiBhbnkgYWR2YW5jZSByZW50IG9yIHNlY3VyaXR5IGRlcG9zaXRzIG5vdCByZXR1cm5lZCB0byB0aGUgdGVuYW50LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBleHBlbnNlcyBmb3IgdGhlIHJlbnRhbCBwcm9wZXJ0eSwgaW5jbHVkaW5nIHJlcGFpcnMsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBhbmQgcHJvcGVydHkgdGF4ZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBleHBlbnNlcyBzaGFyZWQgYmV0d2VlbiB0aGUgcmVudGFsIGFuZCBwZXJzb25hbCB1c2UgcG9ydGlvbnMsIGFuZCBob3cgdGhleSBhcmUgZGl2aWRlZC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VXNlIG9mIFByb3BlcnR5Ojwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgbnVtYmVyIG9mIGRheXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Ub3RhbCBudW1iZXIgb2YgZGF5cyByZW50ZWQgYXQgZmFpciByZW50YWwgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgUmVwYWlyczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBvciByZXBhaXJzIG1hZGUgc3BlY2lmaWNhbGx5IGluIHRoZSByZW50YWwgcG9ydGlvbiBhbmQgdGhlIGNvc3QgaW52b2x2ZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoaXMgaW5mb3JtYXRpb24gYXJlIGNydWNpYWwgZm9yIGNvcnJlY3QgdGF4IGZpbGluZyBhbmQgb3B0aW1pemluZyB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zIGFuZCB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+RG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHVzaW5nIHlvdXIgcmVudGFsIHByb3BlcnR5IGZvciBwZXJzb25hbCBwdXJwb3NlcyBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB0aGUgZXhhY3QgbnVtYmVyIG9mIGRheXMgZHVyaW5nIHRoZSB0YXggeWVhciB3aGVuIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBieSB5b3UsIHlvdXIgZmFtaWx5LCBvciBmcmllbmRzIHdpdGhvdXQgY2hhcmdpbmcgcmVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGRheXMgcmVudGVkIGF0IGZhaXIgcmVudGFsIHByaWNlOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBudW1iZXIgb2YgZGF5cyB0aGUgcHJvcGVydHkgd2FzIGFjdHVhbGx5IHJlbnRlZCBvdXQgdG8gdGVuYW50cyBhdCBhIGZhaXIgcmVudGFsIHByaWNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIGluY29tZSByZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgdG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBleHBlbnNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGV4cGVuc2VzIGluY3VycmVkIGZvciB0aGUgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYWR2ZXJ0aXNpbmcsIGNsZWFuaW5nIGFuZCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIHByb3BlcnR5IHRheGVzLCBtb3J0Z2FnZSBpbnRlcmVzdCwgYW5kIGFueSByZXBhaXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIGFuZCBkYXRlczo8L3N0cm9uZz4gTGlzdCBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5IGR1cmluZyB0aGUgdGF4IHllYXIsIGFsb25nIHdpdGggdGhlIGRhdGUgb2YgaW1wcm92ZW1lbnQgYW5kIHRoZSBjb3N0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IFN0YXRlbWVudCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50Ojwvc3Ryb25nPiBBdHRhY2ggYSBjb3B5IG9mIHlvdXIgYW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnQgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudCBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgZW5hYmxlIHVzIHRvIGNvcnJlY3RseSBjYWxjdWxhdGUgdGhlIHBvcnRpb24gb2YgZXhwZW5zZXMgdGhhdCBjYW4gYmUgZGVkdWN0ZWQgYW5kIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvdW50cyBhcyBwZXJzb25hbCB1c2UgdmVyc3VzIHJlbnRhbCB1c2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+ICBcclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhcnRpYWwgUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCByZW50aW5nIG91dCBwYXJ0IG9mIHlvdXIgcHJvcGVydHkgZm9yIHByb2ZpdCwgd2hpbGUgYWxzbyB1c2luZyBpdCBpbiBhIG1hbm5lciB0aGF0IG1heSBjbGFzc2lmeSBpdCBhcyB5b3VyIHJlc2lkZW5jZS4gVG8gYWNjdXJhdGVseSBjYXB0dXJlIGFsbCBpbmZvcm1hdGlvbiBhbmQgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudC9MZWFzZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSByZW50YWwgYWdyZWVtZW50IG9yIGxlYXNlIHRoYXQgc3BlY2lmaWVzIHRoZSB0ZXJtcywgcmVudGFsIHBlcmlvZCwgYW5kIHBheW1lbnQgZGV0YWlscy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5SZW50YWwgSW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IFJlY2VpcHRzIGFuZCByZWNvcmRzIG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZXBhaXJzLCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIGFuZCBwcm9wZXJ0eSBtYW5hZ2VtZW50IGZlZXMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UGVyc29uYWwgVXNlIERldGFpbHM6PC9zdHJvbmc+IEEgbG9nIG9yIGNhbGVuZGFyIGRvY3VtZW50aW5nIHRoZSBzcGVjaWZpYyBkYXlzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMgYW5kIG5vdCByZW50ZWQgb3V0LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IFRheCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCBzdGF0ZW1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBSZWNvcmRzIG9mIGFueSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMgb3IgZGVwcmVjaWF0aW9uIHNjaGVkdWxlcyBpZiBwcmV2aW91c2x5IGNsYWltZWQgb24geW91ciB0YXggcmV0dXJucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IGRvY3VtZW50cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBvciBjb250YWN0IHVzIGRpcmVjdGx5IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgY29uY2VybnMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3lhbHR5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUm95YWx0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIGluZGljYXRlZCByZWNlaXZpbmcgcGF5bWVudHMgdGhhdCBjb3VsZCBiZSBjb25zaWRlcmVkIHJveWFsdHkgaW5jb21lIHRoaXMgcGFzdCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24sIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbGwgRm9ybXMgMTA5OS1NSVNDOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgYW55IDEwOTktTUlTQyBmb3JtcyByZWNlaXZlZCBmb3Igcm95YWx0eSBwYXltZW50cy4gSW5jbHVkZSB0aG9zZSBmcm9tIHRyYWRpdGlvbmFsIHNvdXJjZXMgbGlrZSBwYXRlbnRzLCBjb3B5cmlnaHRzLCBhbmQgbWluZXJhbCByaWdodHMsIGFzIHdlbGwgYXMgYW55IGZyb20gZGlnaXRhbCBjb250ZW50IHBsYXRmb3JtcyBzdWNoIGFzIFVkZW15LCBZb3VUdWJlLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBTdGF0ZW1lbnQgb2YgRWFybmluZ3M6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlIHJveWFsdHkgaW5jb21lIGZyb20gc291cmNlcyB0aGF0IGRvIG5vdCBwcm92aWRlIGEgMTA5OS1NSVNDLCBvciBpbiBhZGRpdGlvbiB0byB0aG9zZSB0aGF0IGRvLCB3ZSBuZWVkIGEgZGV0YWlsZWQgc3RhdGVtZW50IG9yIGxvZyBvZiB0aGVzZSBlYXJuaW5ncy4gVGhpcyBzaG91bGQgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdlbmVyYXRpb24gb2YgdGhpcyByb3lhbHR5IGluY29tZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYXJrZXRpbmcsIHByb2R1Y3Rpb24sIGFuZCBsZWdhbCBleHBlbnNlcy4gUGxlYXNlIHByb3ZpZGUgcmVjZWlwdHMsIGludm9pY2VzLCBvciBhIGRldGFpbGVkIGV4cGVuc2UgbG9nLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGlnaXRhbCBDb250ZW50IFBsYXRmb3JtIFJlcG9ydHM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgYW55IHllYXItZW5kIHN1bW1hcnkgcmVwb3J0cyBvciBpbmNvbWUgc3RhdGVtZW50cyBwcm92aWRlZCBieSBkaWdpdGFsIHBsYXRmb3JtcyB3aGVyZSB5b3VyIGNvbnRlbnQgaXMgaG9zdGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IFdpdGhob2xkaW5nIE5vdGljZXM6PC9zdHJvbmc+IElmIHRheCB3YXMgd2l0aGhlbGQgZnJvbSBhbnkgb2YgeW91ciByb3lhbHR5IHBheW1lbnRzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIG5vdGljZXMgaW5kaWNhdGluZyB0aGUgYW1vdW50IHdpdGhoZWxkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGVzZSBkb2N1bWVudHMgYW5kIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoYXQgeW91ciB0YXggcHJlcGFyYXRpb24gaXMgYm90aCBhY2N1cmF0ZSBhbmQgbWF4aW1pemVkIGZvciB5b3VyIGJlbmVmaXQuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBpdGVtcywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIG93bmluZyByZW50YWwgcHJvcGVydGllcyB0aGF0IG9wZXJhdGUgYXMgYSBIb3RlbCwgTW90ZWwsIEJlZCBhbmQgQnJlYWtmYXN0LCBvciBvZmZlciBzaG9ydC10ZXJtIGFjY29tbW9kYXRpb25zIHNpbWlsYXIgdG8gQWlyYm5iLiBUbyBlbnN1cmUgd2UgY2FuIHByb3ZpZGUgeW91IHdpdGggdGhlIGJlc3Qgc2VydmljZSBhbmQgY29tcGx5IHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb3BlcnR5IHlvdSByZW50IG91dCBvbiBhIHNob3J0LXRlcm0gYmFzaXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgUmVjb3Jkczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20gdGhlc2UgcHJvcGVydGllcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byByZW50YWwgaW5jb21lLCBjbGVhbmluZyBmZWVzLCBhbmQgYW55IG90aGVyIGNoYXJnZXMgdG8gcmVudGVycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjb3Jkczo8L3N0cm9uZz4gQ29tcHJlaGVuc2l2ZSBsaXN0IG9mIGFsbCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggcmVudGFsIGFjdGl2aXR5LiBUaGlzIGluY2x1ZGVzIG1vcnRnYWdlIGludGVyZXN0LCBwcm9wZXJ0eSB0YXhlcywgaW5zdXJhbmNlLCByZXBhaXJzIGFuZCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBtYW5hZ2VtZW50IGZlZXMsIGFuZCBhZHZlcnRpc2luZyBjb3N0cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk9jY3VwYW5jeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTnVtYmVyIG9mIGRheXMgZWFjaCBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBkdXJpbmcgdGhlIHllYXIsIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBkYXlzIGl0IHdhcyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3NlcywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkxlZ2FsIERvY3VtZW50YXRpb246PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbG9jYWwgbGljZW5zZXMsIHBlcm1pdHMsIG9yIHJlZ2lzdHJhdGlvbnMgcmVxdWlyZWQgZm9yIG9wZXJhdGluZyB0aGVzZSByZW50YWwgcHJvcGVydGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgY2hvb3Npbmcgb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbl07XHJcbiJdfQ==
1298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxrQkFBa0IsR0FBRztJQUNoQztRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7OzsrSUFRdUg7S0FDNUk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUseURBQXlEO1FBQ3RFLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVBBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzhKQWFzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7a1BBYTBOO0tBQy9PO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzsySEFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs2T0FXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Q0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs4SkFZc0k7S0FDM0o7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDhCQUE4QjtRQUNoRCxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7NE5BU29NO0tBQ3pOO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixrQkFBa0IsRUFBRTs7Ozs7Ozs7dUtBUStJO0tBQ3BLO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxpQ0FBaUM7UUFDbkQsV0FBVyxFQUFFLG9DQUFvQztRQUNqRCxrQkFBa0IsRUFBRTs7Ozs7Ozs7OztvUkFVNFA7S0FDalI7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7K0RBU3VDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx5QkFBeUI7UUFDM0MsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7cUdBVzZFO0tBQ2xHO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw2QkFBNkI7UUFDL0MsV0FBVyxFQUFFLDZCQUE2QjtRQUMxQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7OztrTEFVMEo7S0FDL0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsYUFBYTtRQUMxQixrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozt5TEFVaUs7S0FDdEw7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7O2tIQVUwRjtLQUMvRztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozt5R0FTaUY7S0FDdEc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLCtCQUErQjtRQUNqRCxXQUFXLEVBQUUsK0JBQStCO1FBQzVDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvS0FvQjRJO0tBQ2pLO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQ0FBZ0M7UUFDbEQsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozt3SkFVZ0k7S0FDcko7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGNBQWM7UUFDaEMsV0FBVyxFQUFFLGNBQWM7UUFDM0Isa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OytFQVd1RDtLQUM1RTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsaUJBQWlCO1FBQ25DLFdBQVcsRUFBRSxpQkFBaUI7UUFDOUIsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7K0RBVXVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw0QkFBNEI7UUFDOUMsV0FBVyxFQUFFLDRCQUE0QjtRQUN6QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7OzsrREFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGFBQWE7UUFDL0IsV0FBVyxFQUFFLGFBQWE7UUFDMUIsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OzsrREFZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7K0VBU3VEO0tBQzVFO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxtQ0FBbUM7UUFDckQsV0FBVyxFQUFFLG1DQUFtQztRQUNoRCxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3FFQXdCNkM7S0FDbEU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7OzttTUFRMks7S0FDaE07SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzJDQWFtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0JBQWtCO1FBQ3BDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0Isa0JBQWtCLEVBQUU7Ozs7Ozs7O3NIQVE4RjtLQUNuSDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsc0JBQXNCO1FBQ3hDLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsa0JBQWtCLEVBQUU7Ozs7Ozs7O3lLQVFpSjtLQUN0SztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsV0FBVztRQUM3QixXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OzswSkFXa0k7S0FDdko7SUFDRDtRQUNFLGdCQUFnQixFQUFFLFdBQVc7UUFDN0IsV0FBVyxFQUFFLFdBQVc7UUFDeEIsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OzsrREFZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7OzsrREFjdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OzJDQVVtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBc0J1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNEJBQTRCO1FBQzlDLFdBQVcsRUFBRSw0QkFBNEI7UUFDekMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0pBK0IwSDtLQUMvSTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSx1QkFBdUI7UUFDcEMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0FpQ21CO0tBQ3hDO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OytEQVl1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsd0JBQXdCO1FBQzFDLFdBQVcsRUFBRSx3QkFBd0I7UUFDckMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7K0RBVXVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLFdBQVcsRUFBRSxlQUFlO1FBQzVCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7bUhBWTJGO0tBQ2hIO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxlQUFlO1FBQ2pDLFdBQVcsRUFBRSxlQUFlO1FBQzVCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OytFQVV1RDtLQUM1RTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsb0JBQW9CO1FBQ3RDLFdBQVcsRUFBRSxvQkFBb0I7UUFDakMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Z0VBVXdDO0tBQzdEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7bU9BUTJNO0tBQ2hPO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx3QkFBd0I7UUFDMUMsV0FBVyxFQUFFLHdCQUF3QjtRQUNyQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O3dEQWVnQztLQUNyRDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNEJBQTRCO1FBQzlDLFdBQVcsRUFBRSw0QkFBNEI7UUFDekMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0ZBbUJ1RTtLQUM1RjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7d0RBV2dDO0tBQ3JEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw4QkFBOEI7UUFDaEQsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7O2lHQWV5RTtLQUM5RjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0Isa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBHQTBCa0Y7S0FDdkc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OzhLQVVzSjtLQUMzSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsK0JBQStCO1FBQ2pELFdBQVcsRUFBRSwrQkFBK0I7UUFDNUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozt3RUFTZ0Q7S0FDckU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7b1NBUzRRO0tBQ2pTO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx5QkFBeUI7UUFDM0MsV0FBVyxFQUFFLHlCQUF5QjtRQUN0QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lHQXVDeUU7S0FDOUY7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OytEQVV1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7MkNBVW1CO0tBQ3hDO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixrQkFBa0IsRUFBRTs7Ozs7Ozs7OzJDQVNtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMkJBQTJCO1FBQzdDLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Z0RBVXdCO0tBQzdDO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs0SkFVb0k7S0FDeko7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFOzs7Ozs7Ozs7O2dFQVV3QztLQUM3RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFdBQVcsRUFBRSxxQkFBcUI7UUFDbEMsa0JBQWtCLEVBQUU7Ozs7Ozs7OytEQVF1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsd0JBQXdCO1FBQzFDLFdBQVcsRUFBRSx3QkFBd0I7UUFDckMsa0JBQWtCLEVBQUU7Ozs7Ozs7eUxBT2lLO0tBQ3RMO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxtQkFBbUI7UUFDckMsV0FBVyxFQUFFLG1CQUFtQjtRQUNoQyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7OzhLQVlzSjtLQUMzSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7a0pBZ0IwSDtLQUMvSTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUscUNBQXFDO1FBQ3ZELFdBQVcsRUFBRSxxQ0FBcUM7UUFDbEQsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7OzsrREFldUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGdDQUFnQztRQUNsRCxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7OztpRUFXeUM7S0FDOUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGNBQWM7UUFDaEMsV0FBVyxFQUFFLGNBQWM7UUFDM0Isa0JBQWtCLEVBQUU7Ozs7Ozs7O2lPQVF5TTtLQUM5TjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsc0JBQXNCO1FBQ3hDLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OzRJQVdvSDtLQUN6STtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUJBQW1CO1FBQ3JDLFdBQVcsRUFBRSxtQkFBbUI7UUFDaEMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7OytHQVd1RjtLQUM1RztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsaUNBQWlDO1FBQ25ELFdBQVcsRUFBRSxpQ0FBaUM7UUFDOUMsa0JBQWtCLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozt5UEFlaU87S0FDdFA7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFOzs7Ozs7Ozs7Ozs7MkVBWW1EO0tBQ3hFO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxpQkFBaUI7UUFDbkMsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixrQkFBa0IsRUFBRTs7Ozs7Ozs7OzsrREFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGVBQWU7UUFDakMsV0FBVyxFQUFFLGVBQWU7UUFDNUIsa0JBQWtCLEVBQUU7Ozs7Ozs7OzBPQVFrTjtLQUN2TztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0NBQWtDO1FBQ3BELFdBQVcsRUFBRSxrQ0FBa0M7UUFDL0Msa0JBQWtCLEVBQUU7Ozs7Ozs7O3lUQVFpUztLQUN0VDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7bUpBVzJIO0tBQ2hKO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw0QkFBNEI7UUFDOUMsV0FBVyxFQUFFLDRCQUE0QjtRQUN6QyxrQkFBa0IsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswR0FzQmtGO0tBQ3ZHO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBY3Rpb25UYXhGcmFnbWVudHMgPSBbXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmlvciBZZWFyIFRheCBSZXR1cm5zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogYFByb3ZpZGUgUHJpb3IgWWVhciBUYXggUmV0dXJuc2AsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIHJlcXVpcmUgeW91ciBhc3Npc3RhbmNlIHRvIGVuc3VyZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzLiBPbmUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB5b3VyIDxzdHJvbmc+UHJpb3IgWWVhciBUYXggUmV0dXJuczwvc3Ryb25nPi4gVGhpcyBkb2N1bWVudCBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdmVyaWZ5aW5nIGNhcnJ5LWZvcndhcmQgYW1vdW50cywgY29tcGFyaW5nIHllYXItb3Zlci15ZWFyIGluY29tZSBhbmQgZGVkdWN0aW9ucywgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cy48L3A+XHJcbiAgICA8cD5UbyBmYWNpbGl0YXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5GZWRlcmFsIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiB5b3VyIDxzdHJvbmc+U3RhdGUgdGF4IHJldHVybjwvc3Ryb25nPiBmb3IgdGhlIGxhc3QgdGF4IHllYXIsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+QW55IDxzdHJvbmc+bm90aWNlcyBvciBhbWVuZG1lbnRzPC9zdHJvbmc+IHJlbGF0ZWQgdG8geW91ciBwcmlvciB5ZWFyIHRheCByZXR1cm5zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IGRpZmZpY3VsdHkgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGxldCB1cyBrbm93IGFzIHNvb24gYXMgcG9zc2libGUgc28gd2UgY2FuIGRpc2N1c3MgYWx0ZXJuYXRpdmUgc29sdXRpb25zLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC4gUHJvdmlkaW5nIHRoZXNlIHdpbGwgZW5hYmxlIHVzIHRvIGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uIHdpdGhvdXQgZGVsYXkuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0YXR1dG9yeSBFeHRlbnNpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogYERldGVybWluaW5nIEVsaWdpYmlsaXR5IGZvciBTdGF0dXRvcnkgRmlsaW5nIEV4dGVuc2lvbnNgLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHlvdSBxdWFsaWZ5IGZvciBzdGF0dXRvcnkgZmlsaW5nIGV4dGVuc2lvbnMgZm9yIHlvdXIgdGF4IHJldHVybnMsIHdlIHJlcXVpcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gZnJvbSB5b3UuIFBsZWFzZSBzZWUgYmVsb3cgdGhlIGNhdGVnb3JpZXMgb2YgaW5mb3JtYXRpb24gbmVlZGVkIGJhc2VkIG9uIGRpZmZlcmVudCBlbGlnaWJpbGl0eSBjcml0ZXJpYTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmVkZXJhbCBEaXNhc3RlciBBcmVhczwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q29uZmlybWF0aW9uIG9mIHlvdXIgcHJpbWFyeSByZXNpZGVuY2UgbG9jYXRpb24gZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHJlY2VpdmVkIHJlZ2FyZGluZyBkaXNhc3RlciBkZWNsYXJhdGlvbnMgaW4geW91ciBhcmVhLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MaXZpbmcgQWJyb2FkPC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Qcm9vZiBvZiByZXNpZGVuY2Ugb3V0c2lkZSB0aGUgVW5pdGVkIFN0YXRlcyBmb3IgbW9yZSB0aGFuIDMzMCBmdWxsIGRheXMgd2l0aGluIGEgMTItbW9udGggcGVyaW9kLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgcGh5c2ljYWwgcHJlc2VuY2Ugb3IgYm9uYSBmaWRlIHJlc2lkZW5jZSBpbiBhIGZvcmVpZ24gY291bnRyeS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWN0aXZlIE1pbGl0YXJ5PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGluZGljYXRpbmcgYWN0aXZlIGR1dHkgc3RhdHVzLCBpbmNsdWRpbmcgZGF0ZXMgb2Ygc2VydmljZSB3aXRoaW4gdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgb3JkZXJzIGZvciBvdmVyc2VhcyBkZXBsb3ltZW50LjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db21iYXQgWm9uZTwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+T2ZmaWNpYWwgb3JkZXJzIGRlbW9uc3RyYXRpbmcgeW91ciBkZXBsb3ltZW50IHRvIGEgY29tYmF0IHpvbmUsIGluY2x1ZGluZyB0aGUgc3BlY2lmaWMgZGF0ZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgcmVsZXZhbnQgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2Ugb3Igb3RoZXIgb2ZmaWNpYWwgYm9kaWVzIHJlZ2FyZGluZyB5b3VyIHNlcnZpY2UgaW4gYSBjb21iYXQgem9uZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHlvdSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXBlbmRlbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZXF1ZXN0IGZvciBEZXBlbmRlbnQgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZGVwZW5kZW50cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhcHBseWluZyB0aGUgbW9zdCBiZW5lZmljaWFsIGRlcGVuZGVuY3kgdGVzdHMsIGluY2x1ZGluZyBxdWFsaWZpY2F0aW9ucyBmb3IgSGVhZCBvZiBIb3VzZWhvbGQgKEhPSCksIENoaWxkIFRheCBDcmVkaXQsIGFuZCBvdGhlciByZWxhdGVkIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggb2YgeW91ciBjbGFpbWVkIGRlcGVuZGVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkZ1bGwgTmFtZTo8L3N0cm9uZz4gVGhlIGNvbXBsZXRlIGxlZ2FsIG5hbWUgb2YgdGhlIGRlcGVuZGVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChUSU4pOjwvc3Ryb25nPiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIEJpcnRoOjwvc3Ryb25nPiBIZWxwcyB0byBkZXRlcm1pbmUgZWxpZ2liaWxpdHkgZm9yIGNlcnRhaW4gY3JlZGl0cyBsaWtlIHRoZSBDaGlsZCBUYXggQ3JlZGl0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRpb25zaGlwIHRvIFlvdTo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGVwZW5kZW50J3MgcmVsYXRpb25zaGlwIChzb24sIGRhdWdodGVyLCBzdGVwY2hpbGQsIGZvc3RlciBjaGlsZCwgYnJvdGhlciwgc2lzdGVyLCBldGMuKSB0byB5b3UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3k6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5GaW5hbmNpYWwgU3VwcG9ydDo8L3N0cm9uZz4gQ29uZmlybSB5b3UgcHJvdmlkZWQgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGRlcGVuZGVudOKAmXMgZmluYW5jaWFsIHN1cHBvcnQgZm9yIHRoZSB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q2l0aXplbnNoaXA6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBpcyBhIFUuUy4gY2l0aXplbiwgVS5TLiBuYXRpb25hbCwgb3IgYSByZXNpZGVudCBhbGllbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkZXBlbmRlbnQgaXMgbWFycmllZCBhbmQsIGlmIHNvLCB3aGV0aGVyIHRoZXkgYXJlIGZpbGluZyBqb2ludGx5LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGRldGFpbHMgcmVnYXJkaW5nIGFueSBpbmNvbWUgdGhlIGRlcGVuZGVudCBtYXkgaGF2ZSBlYXJuZWQgb3IgcmVjZWl2ZWQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBpbmZvcm1hdGlvbiB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGZ1cnRoZXIgYXNzaXN0YW5jZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIZWFkIG9mIEhvdXNlaG9sZFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSGVhZCBvZiBIb3VzZWhvbGQgRmlsaW5nXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCB0YXggZmlsaW5nIHVuZGVyIHRoZSBcIkhlYWQgb2YgSG91c2Vob2xkXCIgc3RhdHVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIHN0YXR1cyBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYmVuZWZpdHMsIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIElSUyByZXF1aXJlbWVudHMgYXJlIG1ldC4gUGxlYXNlIHByb3ZpZGU6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+TWFyaXRhbCBTdGF0dXM6PC9zdHJvbmc+IENvbmZpcm1hdGlvbiBvZiB5b3VyIG1hcml0YWwgc3RhdHVzIGFzIG9mIHRoZSBsYXN0IGRheSBvZiB0aGUgdGF4IHllYXIgKGUuZy4sIHNpbmdsZSwgZGl2b3JjZWQsIGxlZ2FsbHkgc2VwYXJhdGVkKS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+SG91c2Vob2xkIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIGluZGljYXRpbmcgdGhhdCB5b3UgcGFpZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY29zdHMgb2Yga2VlcGluZyB1cCBhIGhvbWUgZm9yIHRoZSB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyByZW50LCBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIHV0aWxpdGllcywgcmVwYWlycywgbWFpbnRlbmFuY2UsIGFuZCBncm9jZXJpZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlF1YWxpZnlpbmcgUGVyc29uOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiB0aGUgcXVhbGlmeWluZyBwZXJzb24ocykgd2hvIGxpdmVkIHdpdGggeW91IGluIHRoZSBob21lIGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgeWVhciwgZXhjZXB0IGZvciB0ZW1wb3JhcnkgYWJzZW5jZXMgc3VjaCBhcyBzY2hvb2wuIFBsZWFzZSBpbmNsdWRlOlxyXG4gICAgICA8dWw+XHJcbiAgICAgIDxsaT5GdWxsIG5hbWUgYW5kIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIGNoaWxkLCBwYXJlbnQsIHNpYmxpbmcpLjwvbGk+XHJcbiAgICAgIDxsaT5EdXJhdGlvbiBvZiByZXNpZGVuY3kgYXQgeW91ciBob21lIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPlN1cHBvcnRpbmcgZG9jdW1lbnRzIChiaXJ0aCBjZXJ0aWZpY2F0ZXMsIHNjaG9vbCByZWNvcmRzLCBldGMuKSBwcm92aW5nIHRoZSByZXNpZGVuY3kgYW5kIHJlbGF0aW9uc2hpcC48L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgU3VwcG9ydDo8L3N0cm9uZz4gQW55IGZ1cnRoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHlvdXIgY2xhaW0gZm9yIHRoZSBIZWFkIG9mIEhvdXNlaG9sZCBmaWxpbmcgc3RhdHVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBwcm92aWRpbmcgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgeW91ciBiZW5lZml0IGFuZCB0byBjb21wbHkgd2l0aCB0YXggbGF3cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVzaWRlbmN5IFN0YXR1c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSW5mb3JtYXRpb24gb24gUmVzaWRlbmN5IFN0YXR1c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGVpdGhlciB5b3Ugb3IgeW91ciBzcG91c2UgaXMgbm90IGEgVS5TLiBjaXRpemVuLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIHRheCBzdGF0dXMsIHdlIG5lZWQgdG8gYXBwbHkgdGhlIG5lY2Vzc2FyeSBUYXggUmVzaWRlbmN5IFRlc3RzLCB3aGljaCBpbmNsdWRlIHRoZSA8c3Ryb25nPkdyZWVuIENhcmQgVGVzdDwvc3Ryb25nPiBhbmQgdGhlIDxzdHJvbmc+U3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdDwvc3Ryb25nPi4gVGhpcyB3aWxsIGhlbHAgdXMgZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIGNvbXBsZXRlZCBjb3JyZWN0bHkgYW5kIGNvbXBseSB3aXRoIFUuUy4gcmVndWxhdGlvbnMuPC9wPlxyXG5cclxuICAgIDxwPlRvIHByb2NlZWQsIHdlIGtpbmRseSBhc2sgeW91IHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+R3JlZW4gQ2FyZCBTdGF0dXM6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHlvdSBvciB5b3VyIHNwb3VzZSBoYXZlIGJlZW4gaXNzdWVkIGEgVS5TLiBncmVlbiBjYXJkIChMYXdmdWwgUGVybWFuZW50IFJlc2lkZW50IENhcmQpIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBJZiB5ZXMsIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBncmVlbiBjYXJkIG9yIHRoZSBvZmZpY2lhbCBkb2N1bWVudCBjb25maXJtaW5nIHRoZSBzdGF0dXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIEFycml2YWwgaW4gdGhlIFUuUy46PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlcyB3aGVuIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZmlyc3QgYXJyaXZlZCBpbiB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEhpc3Rvcnk6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgdGhlIGRhdGVzIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZW50ZXJlZCBhbmQgbGVmdCB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBTdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VmlzYSBUeXBlOjwvc3Ryb25nPiBJZiB5b3Ugb3IgeW91ciBzcG91c2UgYXJlIG9uIGEgdmlzYSwgcGxlYXNlIHNwZWNpZnkgdGhlIHR5cGUgYW5kIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSB2aXNhLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBUYXggRmlsaW5nczo8L3N0cm9uZz4gQ29waWVzIG9mIGxhc3QgeWVhcidzIHRheCByZXR1cm5zLCBpZiBhcHBsaWNhYmxlLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBwcm92aWRlIGNvbnRleHQgYW5kIGhlbHAgZGV0ZXJtaW5lIHJlc2lkZW5jeSBzdGF0dXMgbW9yZSBhY2N1cmF0ZWx5LjwvbGk+XHJcbiAgICA8L29sPlxyXG5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIFlvdSBjYW4gc2VuZCB0aGVtIHRvIHVzIHZpYSBlbWFpbCBvciB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC4gRm9yIGFueSBxdWVzdGlvbnMgb3IgYXNzaXN0YW5jZSwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPlxyXG5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJKb2ludCBUYXggUmVsaWVmXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJKb2ludCBUYXggUmVsaWVmIERldGFpbHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGFzc2lzdCB5b3UgZWZmZWN0aXZlbHkgd2l0aCB5b3VyIHJlcXVlc3QgZm9yIGpvaW50IHRheCByZWxpZWYsIHdlIG5lZWQgdG8gY29sbGVjdCBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHlvdXIgc2l0dWF0aW9uIHRob3JvdWdobHkuIFRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgbW9zdCBzdWl0YWJsZSB0eXBlIG9mIHJlbGllZiBmb3IgeW91ciBjaXJjdW1zdGFuY2VzLCB3aGljaCBtYXkgaW5jbHVkZSBJbm5vY2VudCBTcG91c2UgUmVsaWVmLCBJbmp1cmVkIFNwb3VzZSBBbGxvY2F0aW9uLCBTZXBhcmF0aW9uIG9mIExpYWJpbGl0eSBSZWxpZWYsIG9yIEVxdWl0YWJsZSBSZWxpZWYuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29tcGxldGUgVGF4IFJldHVybnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbGwgdGF4IHJldHVybnMgZm9yIHRoZSB5ZWFycyB5b3UgYXJlIHJlcXVlc3RpbmcgcmVsaWVmLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudDo8L3N0cm9uZz4gQSB3cml0dGVuIHN0YXRlbWVudCBleHBsYWluaW5nIHdoeSB5b3UgYmVsaWV2ZSB5b3UgcXVhbGlmeSBmb3IgcmVsaWVmLCBpbmNsdWRpbmcgYW55IHNwZWNpZmljIGV2ZW50cyBvciBjaXJjdW1zdGFuY2VzIHlvdSB3YW50IHVzIHRvIGNvbnNpZGVyLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkluY29tZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBQcm9vZiBvZiB5b3VyIGN1cnJlbnQgaW5jb21lIGFuZCB0aGF0IG9mIHlvdXIgc3BvdXNlIGlmIGFwcGxpY2FibGUsIHN1Y2ggYXMgcmVjZW50IHBheSBzdHVicywgVy0yIGZvcm1zLCBvciBvdGhlciBpbmNvbWUgc3RhdGVtZW50cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBGaW5hbmNpYWwgU2l0dWF0aW9uOjwvc3Ryb25nPiBEb2N1bWVudHMgc2hvd2luZyB5b3VyIGN1cnJlbnQgZmluYW5jaWFsIHNpdHVhdGlvbiwgaW5jbHVkaW5nIGJhbmsgc3RhdGVtZW50cywgbW9udGhseSBiaWxscywgYW5kIGFueSBvdGhlciBsaWFiaWxpdGllcy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIE1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byBzZXBhcmF0aW9uLCBkaXZvcmNlLCBvciBhbm51bG1lbnQuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmNlOjwvc3Ryb25nPiBEb2N1bWVudHMgdGhhdCBwcm92ZSB3aGVyZSBlYWNoIG9mIHlvdSBoYXMgbGl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhcnMgaW4gcXVlc3Rpb24uPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgam9pbnQgdGF4IGxpYWJpbGl0eSwgcGxlYXNlIGluY2x1ZGUgY29waWVzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUuIFlvdSBtYXkgc2VuZCB0aGVtIHZpYSBlbWFpbCwgb3IgdXBsb2FkLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgdG8gcHJvdmlkZSwgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPldlIHVuZGVyc3RhbmQgdGhhdCB0aGlzIHByb2Nlc3MgY2FuIGJlIGNvbXBsZXgsIGJ1dCB3ZSBhcmUgaGVyZSB0byBndWlkZSB5b3UgdGhyb3VnaCBpdC4gT3VyIGdvYWwgaXMgdG8gZW5zdXJlIHdlIGhhdmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgeW91ciBzaXR1YXRpb24gdG8gYWR2b2NhdGUgZm9yIHRoZSBtb3N0IGZhdm9yYWJsZSBvdXRjb21lIG9uIHlvdXIgYmVoYWxmLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCIxMDk5IE5FQyBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIjEwOTkgTkVDIEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIHJlcXVpcmUgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgb2YgYWxsIHlvdXIgc291cmNlcyBvZiBpbmNvbWUuIFNwZWNpZmljYWxseSwgd2UgbmVlZCB0byBhY2NvdW50IGZvciB5b3VyIDEwOTkgTkVDIEluY29tZS4gVGhlIDEwOTktTkVDIGZvcm0gaXMgY3J1Y2lhbCBmb3IgY29ycmVjdGx5IHJlcG9ydGluZyB5b3VyIG5vbi1lbXBsb3llZSBjb21wZW5zYXRpb24uPC9wPlxyXG4gICAgPHA+VG8gZW5zdXJlIGEgdGhvcm91Z2ggYW5kIGFjY3VyYXRlIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdXMgd2l0aCB0aGUgZm9sbG93aW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+QWxsIDEwOTktTkVDIGZvcm1zPC9iPiB5b3UgcmVjZWl2ZWQgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSA8Yj5hZGRpdGlvbmFsIG5vbi1lbXBsb3llZSBjb21wZW5zYXRpb248L2I+IG5vdCByZXBvcnRlZCBvbiBhIDEwOTktTkVDIGZvcm0uPC9saT5cclxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gcmVnYXJkaW5nIDxiPmV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciAxMDk5IE5FQyBpbmNvbWU8L2I+LCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHlldCByZWNlaXZlZCBhbGwgeW91ciAxMDk5LU5FQyBmb3JtcywgcGxlYXNlIGxldCB1cyBrbm93LCBhbmQgcHJvdmlkZSBhbiBlc3RpbWF0ZSBvZiB3aGVuIHlvdSBleHBlY3QgdG8gcmVjZWl2ZSB0aGVtLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBhY2N1cmF0ZWx5IHJlcG9ydGluZyB5b3VyIGluY29tZSBhbmQgYXZvaWRpbmcgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMgZnJvbSB0aGUgSVJTLjwvcD5cclxuICAgIDxwPlBsZWFzZSByZWFjaCBvdXQgdG8gdXMgZGlyZWN0bHkgc2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24uIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBwcm9jZXNzZWQgZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPlxyXG5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTY2hlZHVsZSBLLTEgSW5mb3JtYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNjaGVkdWxlIEstMSBJbmZvcm1hdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgU2NoZWR1bGUgSyBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBJbiBvcmRlciB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgZ2F0aGVyIGFsbCBuZWNlc3NhcnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBpbmNvbWUuPC9wPlxyXG4gICAgPHA+SWYgd2UgYXJlIHByZXBhcmluZyB5b3VyIGJ1c2luZXNzIHJldHVybiwgcmVzdCBhc3N1cmVkIHRoYXQgd2Ugd2lsbCBnZW5lcmF0ZSB0aGUgYXBwbGljYWJsZSBTY2hlZHVsZSBLLTEocykgZm9yIHlvdXIgYnVzaW5lc3MgaW50ZXJlc3RzLiBIb3dldmVyLCBpdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBjb2xsZWN0IGNvcGllcyBvZiA8c3Ryb25nPmFsbCBvdGhlciBTY2hlZHVsZSBLLTFzPC9zdHJvbmc+IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCB0byBpbmNvcnBvcmF0ZSBpbnRvIHlvdXIgcGVyc29uYWwgdGF4IHJldHVybi48L3A+ICBcclxuICAgIDxoMz5TcGVjaWZpYyBEb2N1bWVudCBSZXF1ZXN0OjwvaDM+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkFueSBhbmQgYWxsIFNjaGVkdWxlIEstMShzKSB5b3UgaGF2ZSByZWNlaXZlZCBmcm9tOjwvbGk+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICA8bGk+UGFydG5lcnNoaXBzPC9saT5cclxuICAgICAgICAgICAgPGxpPlMgQ29ycG9yYXRpb25zPC9saT5cclxuICAgICAgICAgICAgPGxpPkVzdGF0ZSBvciBUcnVzdHM8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYXJlIDxzdHJvbmc+Y2xlYXIgYW5kIGxlZ2libGU8L3N0cm9uZz4gdG8gcHJldmVudCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciByZXR1cm4uIFlvdSBtYXkgc3VibWl0IHRoZXNlIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCwgb3IgY29udGFjdCB1cyB0byBtYWtlIGFsdGVybmF0aXZlIGFycmFuZ2VtZW50cyBpZiBuZWNlc3NhcnkuPC9wPlxyXG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFueSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHRoZSBwcmVzZW5jZSBvZiBzZWxmLWVtcGxveW1lbnQgaW5jb21lIG5vdCByZXBvcnRlZCB0aHJvdWdoIDEwOTktTkVDIGZvcm1zIG9yIGEgU2NoZWR1bGUgSy0xLiBUbyBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBtYXhpbWl6ZXMgeW91ciBiZW5lZml0cywgaXQncyBjcnVjaWFsIHdlIGdhdGhlciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlc2Ugc291cmNlcyBvZiBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggc2VsZi1lbXBsb3ltZW50IGFjdGl2aXR5Ojwvc3Ryb25nPiBCcmllZmx5IGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YgZWFjaCBhY3Rpdml0eSBmcm9tIHdoaWNoIHlvdSBkZXJpdmUgc2VsZi1lbXBsb3ltZW50IGluY29tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIG9wZXJhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggc2VsZi1lbXBsb3ltZW50IGFjdGl2aXR5LCBzcGVjaWZ5IHRoZSBkYXRlcyBvciByYW5nZSBvZiBkYXRlcyBkdXJpbmcgd2hpY2ggeW91IGVhcm5lZCBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBpbmNvbWUgZ2VuZXJhdGVkOjwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgYmVmb3JlIGFueSBleHBlbnNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2VzIGluY3VycmVkOjwvc3Ryb25nPiBMaXN0IGFsbCBleHBlbnNlcyByZWxhdGVkIHRvIGVhY2ggc2VsZi1lbXBsb3ltZW50IGFjdGl2aXR5LiBQbGVhc2UgY2F0ZWdvcml6ZSB0aGVzZSBleHBlbnNlcyAoZS5nLiwgb2ZmaWNlIHN1cHBsaWVzLCB0cmF2ZWwsIGFkdmVydGlzaW5nKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlY29yZHMgb3IgZG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IGV4aXN0aW5nIHJlY29yZHMgb3IgZG9jdW1lbnRhdGlvbiB0aGF0IGNvcnJvYm9yYXRlIHlvdXIgaW5jb21lIGFuZCBleHBlbnNlcywgc3VjaCBhcyBiYW5rIHN0YXRlbWVudHMsIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgY29udHJhY3RzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgYW1vdW50IG9mIHRheCB5b3Ugb3dlIGFuZCBpZGVudGlmeWluZyBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgdGhhdCBjYW4gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciB0aW1lbHkgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCwgYW5kIHdlIGFyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGVudHJ1c3RpbmcgdXMgd2l0aCB0aGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gQXMgcGFydCBvZiBvdXIgY29tcHJlaGVuc2l2ZSByZXZpZXcgYW5kIGluIG91ciBxdWVzdCB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZ3MsIHdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCB3YWdlcyBmcm9tIGVtcGxveW1lbnQgb3ZlciB0aGUgcGFzdCB0YXggeWVhci48L3A+XHJcbiAgICA8cD5UbyBwcm9jZWVkIGVmZmVjdGl2ZWx5LCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlctMiBGb3Jtczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFsbCBXLTIgZm9ybXMgcmVjZWl2ZWQgZnJvbSB5b3VyIGVtcGxveWVycy4gVGhpcyBpbmNsdWRlcyB3YWdlcyBlYXJuZWQgZnJvbSBhbGwgc291cmNlcywgbm90IGp1c3QgZnJvbSB0aGUgUy1Db3Jwb3JhdGlvbiwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlZlcmlmaWNhdGlvbiBvZiBTLUNvcnBvcmF0aW9uIFdhZ2VzOjwvc3Ryb25nPiBJZiB3ZSBhcmUgYWxzbyBoYW5kbGluZyB5b3VyIGJ1c2luZXNzIHRheGVzIGZvciBhbiBTLUNvcnBvcmF0aW9uLCB3ZSBsaWtlbHkgaGF2ZSB0aGUgd2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhhdCBlbnRpdHkuIEhvd2V2ZXIsIGZvciB0aG9yb3VnaG5lc3MgYW5kIGNvbXBsaWFuY2UsIHBsZWFzZSBjb25maXJtIGlmIHRoZSB3YWdlcyBmcm9tIHRoZSBTLUNvcnBvcmF0aW9uIGFyZSBmdWxseSByZXByZXNlbnRlZCBpbiB0aGUgZG9jdW1lbnRzIHdlIGFscmVhZHkgaG9sZC4gVGhpcyB3aWxsIGhlbHAgdXMgdmVyaWZ5IHRoYXQgYWxsIGluY29tZSBpcyBhY2N1cmF0ZWx5IHJlcG9ydGVkLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBJbmNvbWUgRG9jdW1lbnRzOjwvc3Ryb25nPiBTaG91bGQgeW91IGhhdmUgb3RoZXIgc291cmNlcyBvZiB3YWdlIGluY29tZSAoZS5nLiwgY29udHJhY3Qgd29yaywgYm9udXNlcywgZXRjLikgbm90IGNvdmVyZWQgYnkgdGhlIFctMiBmb3JtcyBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgYW55IDEwOTkgZm9ybXMgb3Igb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgY29vcGVyYXRpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gS2luZGx5IHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJvcGVydHkgb3IgU2VydmljZXMgTGlldSBXYWdlc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJvcGVydHkvU2VydmljZXMgaW4gTGlldSBvZiBXYWdlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIHByb3BlcnR5IGFuZC9vciBzZXJ2aWNlcyBpbiBsaWV1IG9mIHRyYWRpdGlvbmFsIHdhZ2VzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgdHlwZSBvZiBjb21wZW5zYXRpb24gY29uc3RpdHV0ZXMgdGF4YWJsZSBpbmNvbWUgYW5kIG11c3QgYmUgYWNjdXJhdGVseSByZXBvcnRlZCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGZ1bGx5IGNvbXBsaWFudCB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XHJcbiAgICA8cD5UbyBhY2N1cmF0ZWx5IHJlY29nbml6ZSBhbmQgcmVwb3J0IHRoZXNlIGl0ZW1zIGFzIHRheGFibGUgaW5jb21lLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgUHJvcGVydHkgb3IgU2VydmljZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBhbnkgcHJvcGVydHkgb3Igc2VydmljZXMgeW91IHJlY2VpdmVkLiBQbGVhc2UgaW5jbHVkZSBwaHlzaWNhbCBjaGFyYWN0ZXJpc3RpY3MgZm9yIHByb3BlcnR5IG9yIHRoZSBzY29wZSBvZiBzZXJ2aWNlcyByZW5kZXJlZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RmFpciBNYXJrZXQgVmFsdWUgYXQgVGltZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBwcm9wZXJ0eSBvciBzZXJ2aWNlIGF0IHRoZSB0aW1lIHlvdSByZWNlaXZlZCBpdC4gSWYgeW91IGhhdmUgYW55IGFwcHJhaXNhbHMgb3IgZG9jdW1lbnRzIHRvIHN1cHBvcnQgdGhlIEZNViwgcGxlYXNlIGluY2x1ZGUgdGhlbS48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvciBBZ3JlZW1lbnRzOjwvc3Ryb25nPiBQcm92aWRlIGFueSBkb2N1bWVudGF0aW9uIG9yIHdyaXR0ZW4gYWdyZWVtZW50cyB0aGF0IGRldGFpbCB0aGUgYXJyYW5nZW1lbnQgZm9yIHJlY2VpdmluZyBwcm9wZXJ0eSBvciBzZXJ2aWNlcyBpbiBsaWV1IG9mIHdhZ2VzLiBUaGlzIGNhbiBpbmNsdWRlIGNvbnRyYWN0cywgZW1haWxzLCBvciBhbnkgZm9ybSBvZiBjb21tdW5pY2F0aW9uIHRoYXQgb3V0bGluZXMgdGhlIGFncmVlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGUgcHJvcGVydHkgb3Igc2VydmljZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkVtcGxveWVyL1Byb3ZpZGVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IHByb3ZpZGVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgYXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGFzIHBvc3NpYmxlLiBJbmNvbXBsZXRlIG9yIGluYWNjdXJhdGUgaW5mb3JtYXRpb24gbWF5IGxlYWQgdG8gZGVsYXlzIGluIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4gb3IgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoZSBJUlMuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gcmVnYXJkaW5nIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcml0aWNhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSd2ZSBtZW50aW9uZWQgYmVpbmcgcmVpbWJ1cnNlZCBmb3IgY2VydGFpbiBleHBlbnNlcyB1bmRlciBhbiBFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHJlaW1idXJzZW1lbnRzIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+QSBjb3B5IG9mIHRoZSBmb3JtYWwgd3JpdHRlbiBBY2NvdW50YWJsZSBQbGFuIHByb3ZpZGVkIGJ5IHlvdXIgZW1wbG95ZXIuIFRoaXMgc2hvdWxkIG91dGxpbmUgdGhlIGV4cGVuc2UgYWxsb3dhbmNlIGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSByZWltYnVyc2VtZW50IHBvbGljeS48L2xpPlxyXG4gICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb3JyZXNwb25kZW5jZSBmcm9tIHlvdXIgZW1wbG95ZXIgY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIEFjY291bnRhYmxlIFBsYW4uPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgZXhwZW5zZXMgcmVpbWJ1cnNlZCB1bmRlciB0aGUgcGxhbiwgaW5jbHVkaW5nIGRhdGVzLCBhbW91bnRzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgZXhwZW5zZSAocmVjZWlwdHMgb3IgaW52b2ljZXMpIHByb3ZpZGVkIHRvIHlvdXIgZW1wbG95ZXIgZm9yIHJlaW1idXJzZW1lbnQgdW5kZXIgdGhlIHBsYW4uPC9saT5cclxuICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBvciBpbmZvcm1hdGlvbiByZWxldmFudCB0byB0aGUgcmVpbWJ1cnNlbWVudHMgb3IgdGhlIEFjY291bnRhYmxlIFBsYW4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2Ugc2VuZCB1cyB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHNtb290aGx5IHdpdGggeW91ciB0YXggcmV0dXJuIHByZXBhcmF0aW9uLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIEZyaW5nZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGVuc3VyaW5nIGFsbCBmb3JtcyBvZiBjb21wZW5zYXRpb24sIGluY2x1ZGluZyB0YXhhYmxlIGZyaW5nZSBiZW5lZml0cywgYXJlIGFjY3VyYXRlbHkgcmVwb3J0ZWQgb24geW91ciB0YXggcmV0dXJucy4gQmFzZWQgb24gb3VyIHByZXZpb3VzIGNvbW11bmljYXRpb24sIGl0IGFwcGVhcnMgeW91IG1heSBoYXZlIHJlY2VpdmVkIGJlbmVmaXRzIHRoYXQgbmVlZCB0byBiZSByZXZpZXdlZCBmdXJ0aGVyLiBUbyBhc3Npc3QgeW91IHByb3Blcmx5LCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWMgZGV0YWlsczo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIGJlbmVmaXQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZyaW5nZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbXBhbnkgY2FycywgbWVtYmVyc2hpcHMsIGVkdWNhdGlvbmFsIGFzc2lzdGFuY2UsIGV0Yy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPlZhbHVlIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIChGTVYpIG9mIGVhY2ggYmVuZWZpdC4gSWYgeW91J3JlIHVuc3VyZSwgcGxlYXNlIHByb3ZpZGUgYW4gZXN0aW1hdGUgYW5kIHRoZSBiYXNpcyBmb3IgdGhpcyBlc3RpbWF0ZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkFueSBhbW91bnRzIGNvbnRyaWJ1dGVkIGJ5IHlvdTo8L3N0cm9uZz4gSWYgeW91IG1hZGUgY29udHJpYnV0aW9ucyB0b3dhcmQgdGhlIGNvc3Qgb2YgYW55IGJlbmVmaXQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5CZW5lZml0IGRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBzdXBwb3J0IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgc3VjaCBhcyBzdGF0ZW1lbnRzLCBhZ3JlZW1lbnRzLCBvciByZWNlaXB0cy48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRhdGVzOjwvc3Ryb25nPiBUaGUgcGVyaW9kIGR1cmluZyB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlc2UgYmVuZWZpdHMuIEluY2x1ZGUgc3BlY2lmaWMgZGF0ZXMgaWYgcG9zc2libGUuPC9saT5cclxuICA8bGk+PHN0cm9uZz5FbXBsb3llciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGVtcGxveWVyKHMpIHByb3ZpZGluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgZGV0ZXJtaW5pbmcgdGhlIHRheGFibGUgdmFsdWUgb2YgdGhlc2UgZnJpbmdlIGJlbmVmaXRzIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG48cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJOb24gVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBmaW5hbGl6aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBpZGVudGlmaWVkIHBvdGVudGlhbCBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMgdGhhdCBtYXkgYXBwbHkgdG8geW91ciBzaXR1YXRpb24uIFRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIG9wdGltaXplIHlvdXIgdGF4IG91dGNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFueSBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMgeW91IG1heSBoYXZlIHJlY2VpdmVkOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyBtYXkgaW5jbHVkZSBoZWFsdGggc2F2aW5ncyBhY2NvdW50cyAoSFNBcyksIGVtcGxveWVlIGRpc2NvdW50cywgcHVibGljIHRyYW5zaXQgcGFzc2VzLCBldGMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBGb3Igbm9uLXRheGFibGUgYmVuZWZpdHMsIHRoaXMgaGVscHMgaW4gcmVjb3JkLWtlZXBpbmcgYW5kIGNvbmZpcm1pbmcgZXhlbXB0aW9uIHN0YXR1cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gYW1vdW50cywgaWYgYW55Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0b3dhcmRzIGFueSBvZiB0aGVzZSBiZW5lZml0cywgaW5kaWNhdGUgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5CZW5lZml0IGRvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIGNvcnJvYm9yYXRlIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCwgc3VjaCBhcyBzdGF0ZW1lbnRzLCBhZ3JlZW1lbnRzLCBvciByZWNlaXB0cy48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5EYXRlcyBvZiByZWNlaXB0Ojwvc3Ryb25nPiBUaGUgdGltZWZyYW1lIGR1cmluZyB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlc2UgYmVuZWZpdHMuIEluY2x1ZGUgYXMgcHJlY2lzZSBkYXRlcyBhcyBwb3NzaWJsZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBvciBwcm92aWRlciBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgZW1wbG95ZXIocykgb3IgdGhpcmQtcGFydHkgcHJvdmlkZXIocykgb2ZmZXJpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5HYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiBoZWxwcyBlbnN1cmUgdGhhdCB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgZnVsbCBhZHZhbnRhZ2Ugb2Ygbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzLiBQbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW55IGhlbHAgaWRlbnRpZnlpbmcgb3IgZG9jdW1lbnRpbmcgdGhlc2UgYmVuZWZpdHMuPC9wPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJWZXRlcmFuIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJWQSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4sIHdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBWZXRlcmFuIEJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cclxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiB0aGlzIHRhc2ssIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIFZldGVyYW4gQmVuZWZpdHMgeW91IHJlY2VpdmVkLCBpbmNsdWRpbmcgYW55IGRpc2FiaWxpdHksIGVkdWNhdGlvbiwgYW5kIHBlbnNpb24gYmVuZWZpdHMuPC9saT5cclxuICAgICAgICA8bGk+T2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCB0eXBlIG9mIGJlbmVmaXQgcmVjZWl2ZWQsIHN1Y2ggYXMgYXdhcmQgbGV0dGVycyBvciBzdGF0ZW1lbnRzIGZyb20gdGhlIERlcGFydG1lbnQgb2YgVmV0ZXJhbnMgQWZmYWlycyAoVkEpLjwvbGk+XHJcbiAgICAgICAgPGxpPkFueSBjb3JyZXNwb25kZW5jZSBmcm9tIHRoZSBWQSBvciBvdGhlciByZWxldmFudCBlbnRpdGllcyByZWdhcmRpbmcgdGhlIHRheGFiaWxpdHkgb2YgeW91ciBiZW5lZml0cy48L2xpPlxyXG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgcmVjZWl2ZWQgZm9yIGVhY2ggYmVuZWZpdCB0aHJvdWdob3V0IHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT5Bbnkgb3RoZXIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHByb3ZpZGUgY2xhcml0eSBvbiB0aGUgbmF0dXJlIGFuZCBhbW91bnQgb2YgeW91ciBWZXRlcmFuIEJlbmVmaXRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB3aGljaCBiZW5lZml0cyBhcmUgdGF4YWJsZSBhbmQgZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gUGxlYXNlIHN1Ym1pdCB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZSBJbnN1cmFuY2UgUGF5bWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBtZW50aW9uIG9mIHJlY2VpdmluZyBsaWZlIGluc3VyYW5jZSBwYXltZW50cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIHRoZXNlIHByb2NlZWRzIGFyZSBpbmRlZWQgbm9uLXRheGFibGUsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSBsaWZlIGluc3VyYW5jZSBwYXltZW50cy48L2xpPlxyXG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIHBlcnRhaW5pbmcgdG8gdGhlIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgaW5zdXJlZCBpbmRpdmlkdWFsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XHJcbiAgICAgIDxsaT5BbnkgY29tbXVuaWNhdGlvbnMgb3IgbGV0dGVycyBmcm9tIHRoZSBpbnN1cmFuY2UgY29tcGFueSByZWdhcmRpbmcgdGhlIHRheCBzdGF0dXMgb2YgdGhlc2UgcGF5bWVudHMuPC9saT5cclxuICAgICAgPGxpPkRldGFpbHMgcmVnYXJkaW5nIGlmIHRoZSBwb2xpY3kgd2FzIHB1cmNoYXNlZCB3aXRoIGFmdGVyLXRheCBvciBwcmUtdGF4IGRvbGxhcnMuPC9saT5cclxuICAgICAgPGxpPklmIGFueSBwb3J0aW9uIG9mIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50IHdhcyBhbiBpbnZlc3RtZW50IHJldHVybiwgcGxlYXNlIHByb3ZpZGUgcmVsYXRlZCBkb2N1bWVudHMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGd1YXJhbnRlZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk1lZGljYXJlIFdhaXZlciBQYXltZW50c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJucywgd2Ugbm90ZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHMgdW5kZXIgdGhlIGRpZmZpY3VsdHktb2YtY2FyZSBwcm92aXNpb25zIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGVsaWdpYmxlIGluY29tZSBleGNsdXNpb25zLCBpdCdzIGNydWNpYWwgd2UgdmVyaWZ5IGNlcnRhaW4gaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgbGl2aW5nIGFycmFuZ2VtZW50LCBhcyBwZXIgSVJTIGd1aWRlbGluZXMuPC9wPlxyXG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBwYXltZW50cyBxdWFsaWZ5IGZvciBpbmNvbWUgZXhjbHVzaW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZXNpZGVuY2U6PC9zdHJvbmc+IERvY3VtZW50cyBwcm92aW5nIHRoYXQgeW91IGFuZCB0aGUgaW5kaXZpZHVhbCB1bmRlciBjYXJlIHNoYXJlZCB0aGUgc2FtZSBwcmltYXJ5IHJlc2lkZW5jZSBkdXJpbmcgdGhlIHJlY2VpcHQgb2YgdGhlc2UgcGF5bWVudHMuIFRoaXMgY291bGQgaW5jbHVkZSB1dGlsaXR5IGJpbGxzLCBhIHJlbnRhbCBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBpbiBib3RoIG9mIHlvdXIgbmFtZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBDYXJlIFJlY2lwaWVudDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNvbiByZWNlaXZpbmcgY2FyZSwgaW5jbHVkaW5nIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgYW5kIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgaWRlbnRpZmllcyB0aGVpciBuZWVkIGZvciBjYXJlIChlLmcuLCBhIGxldHRlciBmcm9tIGEgaGVhbHRoY2FyZSBwcm92aWRlcikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFJlY29yZHM6PC9zdHJvbmc+IEFueSByZWNvcmRzIG9mIHRoZSBNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHMgeW91IHJlY2VpdmVkLCBhcyB0aGlzIHdpbGwgaGVscCB1cyBkZXRlcm1pbmUgdGhlIGV4YWN0IGFtb3VudHMgYW5kIHRoZSBwZXJpb2RzIGNvdmVyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHMgb3IgQ29udHJhY3RzOjwvc3Ryb25nPiBJZiB0aGVyZSB3YXMgYSBmb3JtYWwgYWdyZWVtZW50IG9yIGNvbnRyYWN0IGRldGFpbGluZyB0aGUgY2FyZSBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgdGhpcyBhcyB3ZWxsLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGlmIHRoZSBjYXJlIGFycmFuZ2VtZW50IHdhcyBmYWNpbGl0YXRlZCB0aHJvdWdoIGEgc3RhdGUgb3IgdGhpcmQtcGFydHkgYWdlbmN5LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgd2UgY29tcGx5IHdpdGggdGF4aW5nIGF1dGhvcml0aWVzIHdoaWxlIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGZpbmFuY2VzLiBJZiBhbnkgb2YgdGhlc2UgcmVxdWlyZW1lbnRzIHBvc2UgYSBkaWZmaWN1bHR5IG9yIGlmIHlvdSBoYXZlIHF1ZXN0aW9ucywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIE91ciBnb2FsIGlzIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBJbnN1cmFuY2UgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgaWYgdGhlc2UgYmVuZWZpdHMgYXJlIGVsaWdpYmxlIHRvIGJlIGV4Y2x1ZGVkIGZyb20geW91ciBpbmNvbWUsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgaW5zdXJhbmNlIHByZW1pdW1zIHBhaWQuPC9wPlxyXG4gICAgPHA+S2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbGVkIHN0YXRlbWVudHMgb3IgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBkaXNhYmlsaXR5IGluc3VyYW5jZSBiZW5lZml0cyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gb24gd2hvIHBhaWQgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyAoeW91IG9yIHlvdXIgZW1wbG95ZXIpLjwvbGk+XHJcbiAgICAgICAgPGxpPklmIHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgeW91IHBhaWQgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgc3VwcG9ydGluZyBkb2N1bWVudHMgZm9yIHRoZSBwYXltZW50cyBtYWRlIGJ5IHlvdSAocmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPklmIHlvdXIgZW1wbG95ZXIgY29udHJpYnV0ZWQgdG8gdGhlIHBheW1lbnQgb2YgdGhlIHByZW1pdW1zOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGJ5IHlvdXIgZW1wbG95ZXIgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRzIGluZGljYXRpbmcgZW1wbG95ZXIgY29udHJpYnV0aW9ucyAocGF5IHN0dWJzLCBlbXBsb3llciBsZXR0ZXJzKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBkZXRlcm1pbmUgdGhlIHRheGFibGUgcG9ydGlvbiwgaWYgYW55LCBvZiB5b3VyIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzLiBQcm92aWRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGhlbHAgdXMgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmcgYW5kIHBvdGVudGlhbGx5IGxvd2VyIHlvdXIgdGF4YWJsZSBpbmNvbWUuPC9wPlxyXG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB3ZSBjYW4gYmUgb2YgZnVydGhlciBhc3Npc3RhbmNlLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNhYmlsaXR5IFJldGlyZW1lbnQgQmVuZWZpdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgdGF4YWJpbGl0eSBvZiB0aGVzZSBiZW5lZml0cywgd2UgbmVlZCBhZGRpdGlvbmFsIGRldGFpbHMuIFRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzIGNhbiBkZXBlbmQgb24gd2hlbiB5b3UgdG9vayByZXRpcmVtZW50IGR1ZSB0byBkaXNhYmlsaXR5LjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBSZXRpcmVtZW50Ojwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSB5b3UgcmV0aXJlZCBkdWUgdG8gZGlzYWJpbGl0eS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgRGlzYWJpbGl0eSBSZXRpcmVtZW50Ojwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgaGF2ZSB0aGF0IGNvbmZpcm1zIHlvdXIgcmV0aXJlbWVudCB3YXMgZHVlIHRvIGRpc2FiaWxpdHkuIFRoaXMgbWF5IGluY2x1ZGUgbGV0dGVycyBmcm9tIHlvdXIgZW1wbG95ZXIsIHRoZSByZXRpcmVtZW50IHBsYW4sIG9yIG1lZGljYWwgcmVjb3Jkcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgQmVuZWZpdHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFNwZWNpZmljIGFtb3VudHMgYW5kIHRoZSBzb3VyY2Ugb2YgdGhlIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cy4gUGxlYXNlIGluY2x1ZGUgYW55IHJlbGF0ZWQgZG9jdW1lbnRzIHN1Y2ggYXMgc3RhdGVtZW50cyBvciBub3RpY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBXLTIgb3IgMTA5OSBGb3Jtczo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmVkIGFueSB3YWdlcyBvciBkaXNhYmlsaXR5IHBheW1lbnRzIHRoYXQgd2VyZSByZXBvcnRlZCBvbiBXLTIgb3IgMTA5OSBmb3JtcyBpbiB0aGUgeWVhciBvZiB5b3VyIHJldGlyZW1lbnQsIHBsZWFzZSBwcm92aWRlIHRoZXNlIGZvcm1zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGUgYWJvdmUgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZSBhbmQgYWNjdXJhdGUuIFVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB5b3VyIGRpc2FiaWxpdHkgcmV0aXJlbWVudCBiZW5lZml0cyB3aWxsIGFpZCB1cyBpbiBkZXRlcm1pbmluZyB0aGVpciB0YXhhYmlsaXR5IGFuZCBlbnN1cmluZyB0aGF0IHlvdXIgdGF4IG9ibGlnYXRpb25zIGFyZSBwcmVjaXNlbHkgY2FsY3VsYXRlZC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDbGVyZ3kgV2FnZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkNsZXJneSBXYWdlc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIFctMiB3YWdlcyBhcyBhIGNsZXJneSBtZW1iZXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgeW91ciBjb21wZW5zYXRpb24gcGFja2FnZS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPlctMiBGb3JtOjwvYj4gSWYgbm90IGFscmVhZHkgcHJvdmlkZWQsIGluY2x1ZGUgYW55IFctMiBmb3JtcyBpc3N1ZWQgYnkgeW91ciByZWxpZ2lvdXMgaW5zdGl0dXRpb24uPC9saT5cclxuICAgICAgICA8bGk+PGI+SG91c2luZyBBbGxvd2FuY2UgRG9jdW1lbnRhdGlvbjo8L2I+IERldGFpbGVkIHN0YXRlbWVudCBvciBsZXR0ZXIgZnJvbSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbiBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgZGVzaWduYXRlZCBhcyBob3VzaW5nIGFsbG93YW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5TZWxmLUVtcGxveW1lbnQgVGF4OjwvYj4gQ29uZmlybWF0aW9uIG9uIHdoZXRoZXIgeW91IGhhdmUgdGFrZW4gYSB2b3cgb2YgcG92ZXJ0eSAoaWYgYXBwbGljYWJsZSksIG9yIGFueSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gb3B0aW5nIG91dCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkV4cGVuc2UgUmVpbWJ1cnNlbWVudHM6PC9iPiBEb2N1bWVudGF0aW9uIHNob3dpbmcgYW55IGV4cGVuc2UgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgdW5kZXIgYW4gYWNjb3VudGFibGUgcGxhbi48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5PdGhlciBDb21wZW5zYXRpb246PC9iPiBJbmZvcm1hdGlvbiBvbiBhbnkgb3RoZXIgY29tcGVuc2F0aW9uIHJlY2VpdmVkIGluIHlvdXIgY2FwYWNpdHkgYXMgY2xlcmd5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvdmUgb2ZmZXJpbmdzLCBmZWVzIGZvciBzZXJ2aWNlcyAod2VkZGluZ3MsIGZ1bmVyYWxzLCBldGMuKSwgYW5kIHBhcnNvbmFnZSBhbGxvd2FuY2VzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcHJlc2VudCB5b3VyIGVhcm5pbmdzIGFuZCB0byBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIGNvcnJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCB3aWxsIGhlbHAgZW5zdXJlIHRoYXQgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgaW4gYSB0aW1lbHkgYW5kIGVmZmljaWVudCBtYW5uZXIuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludGVyZXN0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSW50ZXJlc3QgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBmaW5hbmNpYWwgYWN0aXZpdGllcyBmb3IgdGhlIHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBpbnRlcmVzdCBpbmNvbWUuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGRldGFpbHMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PGI+U291cmNlIG9mIEludGVyZXN0IEluY29tZTo8L2I+IFBsZWFzZSBzcGVjaWZ5IHRoZSBpbnN0aXR1dGlvbihzKSBvciBlbnRpdHkoaWVzKSBmcm9tIHdoaWNoIHlvdSByZWNlaXZlZCBpbnRlcmVzdCBpbmNvbWUgKGUuZy4sIGJhbmtzLCBjcmVkaXQgdW5pb25zKS48L2xpPlxyXG4gICAgICA8bGk+PGI+QW1vdW50IFJlY2VpdmVkOjwvYj4gQ29uZmlybSB0aGUgdG90YWwgYW1vdW50IG9mIGludGVyZXN0IGluY29tZSByZWNlaXZlZCBmcm9tIGVhY2ggc291cmNlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPjxiPkFjY291bnQgVHlwZXM6PC9iPiBJZGVudGlmeSB0aGUgdHlwZSBvZiBhY2NvdW50cyB0aGF0IGdlbmVyYXRlZCB0aGUgaW50ZXJlc3QgKGUuZy4sIHNhdmluZ3MsIGNoZWNraW5nLCBjZXJ0aWZpY2F0ZXMgb2YgZGVwb3NpdCkuPC9saT5cclxuICAgICAgPGxpPjxiPlRheCBGb3JtcyBSZWNlaXZlZDo8L2I+IExpc3QgYW55IHRheCBmb3JtcyB5b3UgaGF2ZSByZWNlaXZlZCByZWxhdGVkIHRvIGludGVyZXN0IGluY29tZSwgc3VjaCBhcyBGb3JtIDEwOTktSU5UIG9yIEZvcm0gMTA5OS1PSUQuPC9saT5cclxuICAgICAgPGxpPjxiPkZvcmVpZ24gSW50ZXJlc3Q6PC9iPiBJZiBhbnkgaW50ZXJlc3QgaW5jb21lIHdhcyBlYXJuZWQgZnJvbSBmb3JlaWduIGFjY291bnRzIG9yIHNvdXJjZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMsIGluY2x1ZGluZyB0aGUgY291bnRyeSBvZiBvcmlnaW4uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhlc2UgZGV0YWlscyB3aWxsIGVuYWJsZSB1cyB0byBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIGludGVyZXN0IGluY29tZSBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZSBhbmQgY29ycmVjdC4gWW91IGNhbiBhdHRhY2ggdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGJ5IHJlcGx5aW5nIHRvIHRoaXMgZW1haWwgb3IgdXBsb2FkaW5nIHRoZW0gZGlyZWN0bHkgdG8gb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcmV2aWV3aW5nIHlvdXIgdGF4IHNpdHVhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBhIGdpZnQgZm9yIG9wZW5pbmcgYW4gYWNjb3VudCBhdCBhIGZpbmFuY2lhbCBpbnN0aXR1dGlvbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgZmluYW5jaWFsIGluc3RpdHV0aW9uIHdoZXJlIHRoZSBhY2NvdW50IHdhcyBvcGVuZWQuPC9saT5cclxuICAgICAgICA8bGk+VGhlIGRhdGUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBnaWZ0IHJlY2VpdmVkIChlLmcuLCBjYXNoLCBtZXJjaGFuZGlzZSwgb3Igc2VydmljZXMpLjwvbGk+XHJcbiAgICAgICAgPGxpPlRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiB0aGUgZ2lmdCBhdCB0aGUgdGltZSBpdCB3YXMgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlIGdpZnQgKGUuZy4sIGEgbGV0dGVyLCBlbWFpbCBjb25maXJtYXRpb24sIG9yIHN0YXRlbWVudCBpbmRpY2F0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZ2lmdCkuPC9saT5cclxuICAgICAgICA8bGk+Q29uZmlybWF0aW9uIGlmIHlvdSBoYXZlIHJlY2VpdmVkIG1vcmUgdGhhbiBvbmUgZ2lmdCBmb3Igb3BlbmluZyBhY2NvdW50cyB3aXRoaW4gdGhlIHNhbWUgdGF4IHllYXIsIGFuZCBpZiBzbywgdGhlIGRldGFpbHMgZm9yIGVhY2guPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgY29tcGx5IHdpdGggYWxsIElSUyByZXF1aXJlbWVudHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNEIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJDRCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBvZiB5b3VyIGluY29tZSBmcm9tIENlcnRpZmljYXRlcyBvZiBEZXBvc2l0IChDRHMpIGZvciB0aGUgdGF4IHllYXIsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaXMgZXNzZW50aWFsIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk5hbWUgb2YgdGhlIEJhbmsgb3IgRmluYW5jaWFsIEluc3RpdHV0aW9uOjwvc3Ryb25nPiBXaGVyZSB0aGUgQ0QgaXMgaGVsZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyOjwvc3Ryb25nPiBUaGlzIGhlbHBzIGluIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBDRC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIEludGVyZXN0IEVhcm5lZDo8L3N0cm9uZz4gVGhlIGFtb3VudCBvZiBpbnRlcmVzdCBlYXJuZWQgZnJvbSB0aGUgQ0QgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNEIFRlcm06PC9zdHJvbmc+IFRoZSBkdXJhdGlvbiBvciB0ZXJtIG9mIHRoZSBDRCAoZS5nLiwgNiBtb250aHMsIDEgeWVhcikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFB1cmNoYXNlOjwvc3Ryb25nPiBXaGVuIHlvdSBvcmlnaW5hbGx5IGFjcXVpcmVkIHRoZSBDRC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk1hdHVyaXR5IERhdGU6PC9zdHJvbmc+IFdoZW4gdGhlIENEIHJlYWNoZWQgb3Igd2lsbCByZWFjaCBpdHMgZnVsbCB0ZXJtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1JTlQgRm9ybXM6PC9zdHJvbmc+IElmIHJlY2VpdmVkLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgYW55IDEwOTktSU5UIGZvcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ0QgaW50ZXJlc3QuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIGFjY3VyYXRlIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRzLiBZb3UgbWF5IHVwbG9hZCB0aGUgZG9jdW1lbnRzIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsIG9yIHByb3ZpZGUgdGhlbSB2aWEgZW1haWwuPC9wPlxyXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCB0YXgtZXhlbXB0IGludGVyZXN0IGR1cmluZyB0aGUgdGF4IHllYXIsIHBvc3NpYmx5IGZyb20gbXVuaWNpcGFsIGJvbmRzIG9yIHNpbWlsYXIgaW52ZXN0bWVudHMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U3RhdGVtZW50cyBvZiBUYXgtRXhlbXB0IEludGVyZXN0Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgMTA5OS1JTlQgZm9ybXMgb3IgZXF1aXZhbGVudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHlvdXIgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgSXNzdWluZyBFbnRpdGllczo8L3N0cm9uZz4gQSBsaXN0IG9yIHN0YXRlbWVudCBpZGVudGlmeWluZyB0aGUgZW50aXRpZXMgdGhhdCBpc3N1ZWQgdGhlIGJvbmRzIG9yIHNpbWlsYXIgaW52ZXN0bWVudHMuIFRoaXMgaW5jbHVkZXMgbXVuaWNpcGFsLCBzdGF0ZSwgb3IgZmVkZXJhbCBlbnRpdGllcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgRGV0YWlsOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgaW52ZXN0bWVudHMgY29udHJpYnV0aW5nIHRvIHRheC1leGVtcHQgaW50ZXJlc3QuIFRoaXMgc2hvdWxkIGluY2x1ZGUgdGhlIHB1cmNoYXNlIGRhdGUsIHB1cmNoYXNlIGFtb3VudHMsIGFuZCBhbnkgcmVsYXRlZCBtYXR1cml0eSBkYXRlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkJyb2tlcmFnZSBBY2NvdW50IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgdGhhdCBkZXRhaWwgdHJhbnNhY3Rpb25zIGFuZCBob2xkaW5ncyBpbiB0YXgtZXhlbXB0IGludmVzdG1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QU1UIChBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheCkgQ29uc2lkZXJhdGlvbjo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBkb2N1bWVudGF0aW9uIGluZGljYXRpbmcgd2hldGhlciBhbnkgb2YgdGhlIHRheC1leGVtcHQgaW50ZXJlc3QgaXMgc3ViamVjdCB0byB0aGUgQWx0ZXJuYXRpdmUgTWluaW11bSBUYXguPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFuIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZCBJbnRlcmVzdFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgY29udGludWVkIGVmZm9ydCB0byBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlcywgd2UgYXJlIHJlYWNoaW5nIG91dCB0byBnYXRoZXIgbmVjZXNzYXJ5IGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgaW50ZXJlc3QgeW91IG1heSBoYXZlIHJlY2VpdmVkIGZyb20gcmVkZWVtaW5nIGFuIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L3A+XHJcblxyXG4gICAgPHA+VG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBleGVtcHRpb24gYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUywgd2Uga2luZGx5IHJlcXVlc3QgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgY29weSBvZiBGb3JtIDEwOTktSU5UIG9yIHNpbWlsYXIgc3RhdGVtZW50IHByb3ZpZGVkIGJ5IHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24sIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiBpbnRlcmVzdCByZWNlaXZlZCBmcm9tIHRoZSBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkcyBvZiB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kcyByZWRlZW1lZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Cb25kIHNlcmlhbCBudW1iZXJzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Jc3N1ZSBkYXRlczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+UmVkZW1wdGlvbiBkYXRlczwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50czwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgZG9jdW1lbnRhdGlvbiBmb3IgcXVhbGlmaWVkIGVkdWNhdGlvbmFsIGV4cGVuc2VzIHBhaWQgZHVyaW5nIHRoZSB5ZWFyLCBpbmNsdWRpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5UdWl0aW9uIGFuZCBmZWVzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3Vyc2UgbWF0ZXJpYWxzPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgcmVxdWlyZWQgZXhwZW5zZXMgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+UHJvb2Ygb2YgZW5yb2xsbWVudCBmcm9tIGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGZvciB0aGUgYmVuZWZpY2lhcnkgb2YgdGhlIGJvbmQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHRoZSBpbnRlcmVzdCBpbmNvbWUgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciB0YXggYmVuZWZpdHMuIFdlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgcmVjb21tZW5kIGNvbXBpbGluZyB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZSBkaXJlY3RseS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHRydXN0IGluIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGl2aWRlbmQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZCBpbmNvbWUgb3ZlciB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5jb21lIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbiBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+SWYgYXBwbGljYWJsZSwgZGV0YWlscyByZWdhcmRpbmcgYW55IGZvcmVpZ24gZGl2aWRlbmRzIGluY2x1ZGluZyB0aGUgYW1vdW50IGluIGZvcmVpZ24gY3VycmVuY3ksIHRoZSBjb3VudHJ5IG9mIG9yaWdpbiwgYW5kIGFueSBmb3JlaWduIHRheCBwYWlkLjwvbGk+XHJcbiAgICAgIDxsaT5Gb3IgZGl2aWRlbmRzIHJlaW52ZXN0ZWQsIHBsZWFzZSBwcm92aWRlIHN0YXRlbWVudHMgb3IgY29uZmlybWF0aW9ucyBzaG93aW5nIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZSB0byBhdm9pZCBhbnkgcHJvY2Vzc2luZyBkZWxheXMuIFdlIHJlY29tbWVuZCBzZWN1cmVseSB1cGxvYWRpbmcgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsIG9yIGFycmFuZ2luZyBhIHNlY3VyZSBlbWFpbCB0cmFuc21pc3Npb24uPC9wPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJEaXNwb3NlZCBDYXBpdGFsIEFzc2V0c1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgZGlzcG9zaW5nIG9mIGNhcGl0YWwgYXNzZXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgY29tcGxldGUgYW5kIGNvbXBsaWFudCwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PGI+RGVzY3JpcHRpb24gb2YgZWFjaCBkaXNwb3NlZCBhc3NldDo8L2I+IEluY2x1ZGUgdGhlIHR5cGUgb2YgYXNzZXQgKGUuZy4sIHJlYWwgZXN0YXRlLCBzdG9ja3MsIGJvbmRzKS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5BY3F1aXNpdGlvbiBjb3N0OjwvYj4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIG9yIGNvc3QgYmFzaXMgb2YgZWFjaCBhc3NldCwgaW5jbHVkaW5nIGFueSBpbXByb3ZlbWVudHMgbWFkZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGRpc3Bvc2FsOjwvYj4gVGhlIHNwZWNpZmljIGRhdGUgb24gd2hpY2ggZWFjaCBhc3NldCB3YXMgc29sZCwgZXhjaGFuZ2VkLCBvciBvdGhlcndpc2UgZGlzcG9zZWQgb2YuPC9saT5cclxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPkFzc29jaWF0ZWQgZXhwZW5zZXM6PC9iPiBBbnkgY29zdHMgaW5jdXJyZWQgZGlyZWN0bHkgZnJvbSB0aGUgc2FsZSBvciBkaXNwb3NhbCBwcm9jZXNzLCBzdWNoIGFzIGJyb2tlcidzIGZlZXMsIGFkdmVydGlzaW5nLCBsZWdhbCBmZWVzLCBldGMuPC9saT5cclxuICAgICAgICA8bGk+PGI+UmVhc29uIGZvciBkaXNwb3NhbDo8L2I+IEJyaWVmbHkgZGVzY3JpYmUgdGhlIHJlYXNvbiBiZWhpbmQgdGhlIGRpc3Bvc2FsIG9mIHRoZSBhc3NldCwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgY2FsY3VsYXRpbmcgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzIGFuZCBkZXRlcm1pbmluZyB0aGVpciBpbXBhY3Qgb24geW91ciB0YXggb2JsaWdhdGlvbnMuIFBsZWFzZSBhdHRhY2ggYW55IHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgc3VjaCBhcyBzYWxlcyByZWNlaXB0cywgZGVlZHMsIGNvbnRyYWN0cywgb3IgYnJva2VyYWdlIHN0YXRlbWVudHMsIHRvIHN1YnN0YW50aWF0ZSB0aGUgZGV0YWlscyBwcm92aWRlZC48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWF5IGhhdmUuIFlvdSBjYW4gcmVhY2ggdXMgdmlhIGVtYWlsIG9yIHBob25lIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJNdXR1YWwgRnVuZCBHYWluXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+MTA5OS1ESVYgRm9ybTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvbiBkaXZpZGVuZHMgYW5kIGRpc3RyaWJ1dGlvbnMgeW91IHJlY2VpdmVkIGZyb20geW91ciBtdXR1YWwgZnVuZCBpbnZlc3RtZW50cy4gUGxlYXNlIGVuc3VyZSB0byBwcm92aWRlIHRoaXMgZm9ybSBpZiB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgb24gaXQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5ZZWFyLUVuZCBTdW1tYXJ5Ojwvc3Ryb25nPiBPZnRlbiBtdXR1YWwgZnVuZHMgcHJvdmlkZSBhIHllYXItZW5kIHN1bW1hcnkgdG8gdGhlaXIgaW52ZXN0b3JzLiBUaGlzIHN1bW1hcnkgY2FuIGJlIHZlcnkgaGVscGZ1bCBpbiBwcmVwYXJpbmcgeW91ciB0YXhlcyBhcyBpdCBjb25zb2xpZGF0ZXMgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBvdGhlciByZWxldmFudCBkb2N1bWVudHM6PC9zdHJvbmc+IFRoaXMgY291bGQgaW5jbHVkZSBhZGRpdGlvbmFsIDEwOTkgZm9ybXMgKGxpa2UgMTA5OS1CIGlmIGFueSBzYWxlcyBvY2N1cnJlZCksIG9yaWdpbmFsIGludmVzdG1lbnQgc3RhdGVtZW50cywgb3IgYW55dGhpbmcgZWxzZSB0aGF0IGNvdWxkIGltcGFjdCB5b3VyIHRheCBzaXR1YXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cyBtYXkgcmVxdWlyZSBzb21lIHRpbWUsIGhvd2V2ZXIsIGhhdmluZyB0aGVzZSByZWFkaWx5IGF2YWlsYWJsZSB3aWxsIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGVmZmljaWVuY3kgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBiZSBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgZGlmZmljdWx0aWVzIG9idGFpbmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgRGlzcG9zYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIG1hZGUgYSBkaXNwb3NhbCBvZiBzaGFyZXMgaW4gYSBtdXR1YWwgZnVuZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb21wbGV0ZWQgYWNjdXJhdGVseSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cclxuICAgICAgICA8bGk+RGV0YWlsZWQgPHN0cm9uZz5yZWNvcmQgb2YgdGhlIHB1cmNoYXNlPC9zdHJvbmc+IG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMgaW5jbHVkaW5nIHRoZSBwdXJjaGFzZSBkYXRlIGFuZCBjb3N0IGJhc2lzLiBUaGlzIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIGFueSBjYXBpdGFsIGdhaW4gb3IgbG9zcy48L2xpPlxyXG4gICAgICAgIDxsaT5JZiB0aGUgMTA5OS1CIGZvcm0gaXMgbm90IGF2YWlsYWJsZSwgcGxlYXNlIHByb3ZpZGUgYW55IDxzdHJvbmc+YnJva2VyYWdlIHN0YXRlbWVudHM8L3N0cm9uZz4gb3Igb3RoZXIgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3dzIHRoZSBkaXNwb3NhbCBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzLCBpbmNsdWRpbmcgdGhlIHNhbGUgZGF0ZSBhbmQgYW1vdW50LjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+SGF2aW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZSBkaXNwb3NhbCBvZiB5b3VyIG11dHVhbCBmdW5kIHNoYXJlcyBhbmQgYWNjdXJhdGVseSBjYWxjdWxhdGUgYW55IHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3Nlcy4gVGhpcyB3aWxsIGFsc28gaGVscCB1cyB0byBvcHRpbWl6ZSB5b3VyIHRheCBsaWFiaWxpdHkgZm9yIHRoZSB5ZWFyLjwvcD5cclxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJXYXNoIFNhbGUgVHJhbnNhY3Rpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBpbmRpY2F0aW9uIG9mIGEgcG9zc2libGUgV2FzaCBTYWxlIHRyYW5zYWN0aW9uLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGFjdCBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcnVsZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHRyYW5zYWN0aW9uIHJlY29yZHM8L3N0cm9uZz4gLSBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgc2VjdXJpdHkgdGhhdCB3YXMgc29sZCBhbmQgdGhlbiByZXB1cmNoYXNlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzIGZvciBlYWNoIHRyYW5zYWN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCBiYXNpcyBmb3IgcmVwdXJjaGFzZWQgc2VjdXJpdHk8L3N0cm9uZz4gLSBEZXRhaWxzIG9mIHRoZSBjb3N0IGJhc2lzIGZvciB0aGUgc2VjdXJpdGllcyByZXB1cmNoYXNlZCB3aXRoaW4gYSA2MS1kYXkgd2luZG93ICgzMCBkYXlzIGJlZm9yZSB0byAzMCBkYXlzIGFmdGVyIHRoZSBzYWxlKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+TG9zc2VzIHJlYWxpemVkPC9zdHJvbmc+IC0gRG9jdW1lbnRhdGlvbiBvZiBhbnkgbG9zc2VzIHJlYWxpemVkIGZyb20gdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IGNvcnJlc3BvbmRlbmNlPC9zdHJvbmc+IC0gQ29ycmVzcG9uZGVuY2UgZnJvbSBicm9rZXJzIG9yIGZpbmFuY2lhbCBhZHZpc29ycyByZWdhcmRpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkb2N1bWVudHMgYXJlIG9yZ2FuaXplZCBhbmQgY2xlYXJseSBsYWJlbGVkIGZvciBlYWNoIHRyYW5zYWN0aW9uLiBUaGlzIHdpbGwgZmFjaWxpdGF0ZSBhIHNtb290aGVyIGFuZCBxdWlja2VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljcyBvZiB5b3VyIFdhc2ggU2FsZSB0cmFuc2FjdGlvbiBpcyBjcnVjaWFsIGZvciB1cyB0byBwcm92aWRlIGFjY3VyYXRlIHRheCBhZHZpY2UgYW5kIHByZXBhcmF0aW9uLiBGdXJ0aGVyLCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYXNzaXN0IGluIGRldGVybWluaW5nIGhvdyB0aGUgV2FzaCBTYWxlIHJ1bGUgYWZmZWN0cyB0aGUgZGVkdWN0aWJpbGl0eSBvZiBhbnkgbG9zc2VzIHlvdSBtaWdodCBoYXZlIGluY3VycmVkLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIGNvb3BlcmF0aW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvbGQgSG9tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU29sZCBIb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgU2FsZTo8L3N0cm9uZz4gVGhlIGNsb3NpbmcgZGF0ZSB3aGVuIHRoZSBzYWxlIHdhcyBvZmZpY2lhbGx5IGNvbXBsZXRlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkNvc3QgQmFzaXM6PC9zdHJvbmc+IE9yaWdpbmFsIHB1cmNoYXNlIHByaWNlLCBwbHVzIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgaG9tZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+IEFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvZiBIb21lIEltcHJvdmVtZW50czo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIHByb3BlcnR5LCB3aGljaCBjYW4gYWZmZWN0IHRoZSBjb3N0IGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgVXNlOjwvc3Ryb25nPiBJZiBub3QgYWx3YXlzIHVzZWQgYXMgYSBwZXJzb25hbCBob21lLCBkZXRhaWxzIG9uIGFueSB1c2Ugb2YgdGhlIHByb3BlcnR5IGZvciByZW50YWwsIGJ1c2luZXNzLCBvciBvdGhlciBub24tcGVyc29uYWwgdXNlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggYmVuZWZpdHMgb3Igb2JsaWdhdGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXMgc29vbiBhcyBwb3NzaWJsZSwgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBzb2xkIHByb3BlcnR5IHRoaXMgeWVhciB1bmRlciBhbiBpbnN0YWxsbWVudCBwbGFuLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIHRyYW5zYWN0aW9uIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TYWxlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBjb21wbGV0ZSBzYWxlIGFncmVlbWVudCBkZXRhaWxpbmcgdGhlIHRlcm1zIG9mIHRoZSBpbnN0YWxsbWVudCBzYWxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHByb3BlcnR5IHNvbGQgKGUuZy4sIGxhbmQsIGJ1aWxkaW5nLCBlcXVpcG1lbnQpLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRvdGFsIGFtb3VudHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGRvd24gcGF5bWVudCBhbmQgYW55IGluc3RhbGxtZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJpbmNpcGFsICZhbXA7IEludGVyZXN0IEJyZWFrZG93bjo8L3N0cm9uZz4gQSBicmVha2Rvd24gb2YgdGhlIGFtb3VudHMgcmVjZWl2ZWQgYmV0d2VlbiBwcmluY2lwYWwgYW5kIGludGVyZXN0IGZvciB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSByZWxldmFudCBleHBlbnNlcyBpbiByZWxhdGlvbiB0byB0aGUgc2FsZSB0aGF0IG1pZ2h0IGJlIGRlZHVjdGlibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CdXllciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTGVnYWwgbmFtZSBhbmQgY29udGFjdCBkZXRhaWxzIG9mIHRoZSBidXllci48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjYWxjdWxhdGluZyBhbnkgcHJvZml0IG9yIGxvc3MgZnJvbSB0aGUgc2FsZSBhbmQgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGUgaW5zdGFsbG1lbnQgcGF5bWVudHMgcmVjZWl2ZWQuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgZGlyZWN0bHkgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgdGhlbSB0byB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20uPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgdGhlIFNlY3VyaXR5Ojwvc3Ryb25nPiBGdWxsIG5hbWUgYW5kIHR5cGUgb2YgZWFjaCBzZWN1cml0eSB0aGF0IGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Xb3J0aGxlc3NuZXNzIERldGVybWluYXRpb24gRGF0ZTo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgZGV0ZXJtaW5lZCB0aGUgc2VjdXJpdHkgdG8gYmUgd29ydGhsZXNzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQW55IG9mZmljaWFsIGRvY3VtZW50YXRpb24geW91IHJlY2VpdmVkIG9yIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQgdGhlIGludmVzdG1lbnRzIGJlY2FtZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEFjY291bnQgU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIHlvdXIgaW52ZXN0bWVudCBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgd29ydGhsZXNzIHNlY3VyaXRpZXMgYW5kIHRoZWlyIHZhbHVlIG92ZXIgdGltZSwgbGVhZGluZyB1cCB0byB0aGVpciBkZWNsYXJlZCB3b3J0aGxlc3NuZXNzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTI0NCBCdXNpbmVzcyBTdG9ja1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjQ0IEJ1c2luZXNzIFN0b2NrXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+Y2VydGlmaWNhdGUgb2YgaW5jb3Jwb3JhdGlvbjwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgdGhlIHN0b2NrIHF1YWxpZmllcyBhcyBTZWN0aW9uIDEyNDQgc3RvY2suPC9saT5cclxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IGFuZCBkYXRlIG9mIHRoZSBvcmlnaW5hbCBpbnZlc3RtZW50LjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Qcm9vZiBvZiBiZWluZyBhbiBvcmlnaW5hbCBob2xkZXIuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgdGhlIHNhbGU8L3N0cm9uZz4sIHNwZWNpZnlpbmc6XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OdW1iZXIgb2Ygc2hhcmVzIHNvbGQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5TYWxlIHByaWNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gYXNzZXNzIHRoZSBlbGlnaWJpbGl0eSBmb3IgYSBiZW5lZmljaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LCBwb3RlbnRpYWxseSBtaW5pbWl6aW5nIHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IGZpbGluZy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgVHJhbnNhY3Rpb25zOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+VHlwZSBvZiB0cmFuc2FjdGlvbnMgKGUuZy4sIHNhbGUsIHRyYWRlLCB0cmFuc2ZlciBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cykuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5EYXRlKHMpIG9mIHRyYW5zYWN0aW9ucy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lcyBhbmQgcmVsYXRpb25zaGlwcyB0byB5b3UgKGUuZy4sIGZhbWlseSBtZW1iZXIsIGZyaWVuZCwgb3IgYnVzaW5lc3MgZW50aXR5KS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPk1hcmtldCB2YWx1ZSBvZiBwcm9wZXJ0eSBvciBpbnZlc3RtZW50cyBhdCB0aGUgdGltZSBvZiB0cmFuc2FjdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGV4Y2hhbmdlIG9mIGdvb2RzLCBzZXJ2aWNlcywgb3Igb3RoZXIgYXNzZXRzLCBpbmNsdWRpbmcgdGhlaXIgZmFpciBtYXJrZXQgdmFsdWUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5SZWNlaXB0cyBvciBwcm9vZiBvZiBwYXltZW50L2V4Y2hhbmdlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QXBwcmFpc2FscyBvciB2YWx1YXRpb25zIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyMSBIb21lIFNhbGVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTIxIEhvbWUgU2FsZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIFNhbGU6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkRhdGUgb2Ygc2FsZTwvbGk+XHJcbiAgICAgICAgICA8bGk+U2VsbGluZyBwcmljZTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBwdXJjaGFzZTwvbGk+XHJcbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxyXG4gICAgICAgICAgPGxpPlJlY29yZHMgb2YgaW1wcm92ZW1lbnRzIG1hZGUgKHdpdGggZGF0ZXMgYW5kIGNvc3RzKTwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IGNhc3VhbHR5IGxvc3NlcyBjbGFpbWVkIGFuZCBpbnN1cmFuY2UgcmVpbWJ1cnNlbWVudHMgcmVjZWl2ZWQgd2hpbGUgb3duaW5nIHRoZSBwcm9wZXJ0eTwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVzaWRlbmN5IGFuZCBVc2UgRGF0YTo8L3N0cm9uZz5cclxuICAgICAgICA8dWw+XHJcbiAgICAgICAgICA8bGk+VG90YWwgeWVhcnMgb2Ygb3duZXJzaGlwPC9saT5cclxuICAgICAgICAgIDxsaT5Ub3RhbCB5ZWFycyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYXMgeW91ciBtYWluIGhvbWU8L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XHJcbiAgICAgICAgICA8bGk+QW55IHNwZWNpYWwgY2lyY3Vtc3RhbmNlcyB0aGF0IG1heSBxdWFsaWZ5IGZvciBhbiBleGNlcHRpb24gdG8gdGhlIHBoeXNpY2FsIHByZXNlbmNlIHJlcXVpcmVtZW50IChlLmcuLCBoZWFsdGggaXNzdWVzLCBlbXBsb3ltZW50IGNoYW5nZXMpPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5QcmlvciBHYWluIEV4Y2x1c2lvbnM6PC9zdHJvbmc+XHJcbiAgICAgICAgPHVsPlxyXG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cclxuICAgICAgICAgIDxsaT5JZiB5ZXMsIGRldGFpbHMgb2YgdGhlIHByaW9yIHNhbGUgaW5jbHVkaW5nIGRhdGUgYW5kIGFtb3VudCBvZiBnYWluIGV4Y2x1ZGVkPC9saT5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIHRpbWVseSBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMDMxIEV4Y2hhbmdlXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gSW4gcmV2aWV3aW5nIHlvdXIgcmVjb3JkcywgaXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSBtYXkgaGF2ZSBlbmdhZ2VkIGluIGEgU2VjdGlvbiAxMDMxIGV4Y2hhbmdlLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCByZWxldmFudCBJUlMgZ3VpZGVsaW5lcywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBib3RoIHRoZSByZWxpbnF1aXNoZWQgcHJvcGVydHkgYW5kIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eS4gUGxlYXNlIGluY2x1ZGUgbG9jYXRpb24sIHR5cGUgb2YgcHJvcGVydHkgKGUuZy4sIGNvbW1lcmNpYWwsIHJlc2lkZW50aWFsKSwgYW5kIGFueSBpZGVudGlmeWluZyBudW1iZXJzIChlLmcuLCBwYXJjZWwgbnVtYmVyKS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+VHJhbnNhY3Rpb24gVmFsdWVzOjwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYm90aCB0aGUgcmVsaW5xdWlzaGVkIGFuZCByZXBsYWNlbWVudCBwcm9wZXJ0aWVzIGF0IHRoZSB0aW1lIG9mIHRoZSBleGNoYW5nZSwgYWxvbmcgd2l0aCBhbnkgZmluYW5jaWFsIGFkanVzdG1lbnRzIG9yIGFkZGl0aW9uYWwgY2FzaCByZWNlaXZlZC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIGFueSBwb3RlbnRpYWwgZ2FpbiBvciBsb3NzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkludGVybWVkaWFyeSBEZXRhaWxzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBhYm91dCBhbnkgcXVhbGlmaWVkIGludGVybWVkaWFyeSB1c2VkIGR1cmluZyB0aGUgZXhjaGFuZ2UsIGluY2x1ZGluZyB0aGVpciBuYW1lLCBjb250YWN0IGluZm9ybWF0aW9uLCBhbmQgZGV0YWlscyBvZiB0aGVpciBpbnZvbHZlbWVudC4gSWYgbm8gaW50ZXJtZWRpYXJ5IHdhcyB1c2VkLCBwbGVhc2UgZXhwbGFpbiBob3cgdGhlIGV4Y2hhbmdlIHdhcyBmYWNpbGl0YXRlZC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgb3IgRXhwZW5zZXM6PC9zdHJvbmc+IERldGFpbHMgb2YgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSByZXBsYWNlbWVudCBwcm9wZXJ0eSB3aXRoaW4gdGhlIGV4Y2hhbmdlIHBlcmlvZCBvciBhbnkgYWRkaXRpb25hbCBleHBlbnNlcyBpbmN1cnJlZCB0aGF0IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGUgcHJvcGVydHkncyBiYXNpcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cclxuICAgIDxwPlBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscy4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSBwcm9jZXNzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IG1heSBoYXZlIHVuZGVyZ29uZSBhIFNlY3Rpb24gMTAzMyBleGNoYW5nZSAoaW52b2x1bnRhcnkgY29udmVyc2lvbikgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBtYXhpbXVtIGNvbXBsaWFuY2UgYW5kIGJlbmVmaXQgZm9yIHlvdSwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhpcyBldmVudC4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgSW52b2x1bnRhcnkgQ29udmVyc2lvbjo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgY2lyY3Vtc3RhbmNlcyB0aGF0IGxlZCB0byB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiAoZS5nLiwgbmF0dXJhbCBkaXNhc3RlciwgdGhlZnQsIGNvbmRlbW5hdGlvbikuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbnN1cmFuY2UgUHJvY2VlZHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IEluZGljYXRlIHRoZSBhbW91bnQgb2YgYW55IGluc3VyYW5jZSBwcm9jZWVkcyByZWNlaXZlZCBhcyBjb21wZW5zYXRpb24gZm9yIHRoZSBjb252ZXJzaW9uLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5UaW1lbGluZSBvZiBFdmVudHM6PC9zdHJvbmc+IFByb3ZpZGUgYSB0aW1lbGluZSBvZiB0aGUga2V5IGV2ZW50cywgZnJvbSB0aGUgZGF0ZSBvZiB0aGUgaW52b2x1bnRhcnkgY29udmVyc2lvbiB0byB0aGUgcmVpbnZlc3RtZW50IG9mIHByb2NlZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gQXR0YWNoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIHN1Y2ggYXMgaW5zdXJhbmNlIHNldHRsZW1lbnQgc3RhdGVtZW50cywgcHVyY2hhc2UgY29udHJhY3RzIGZvciByZXBsYWNlbWVudCBwcm9wZXJ0eSwgb3Igb2ZmaWNpYWwgbm90aWNlcyBvZiBjb25kZW1uYXRpb24uPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdG8gZmFjaWxpdGF0ZSBhbiBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHdpdGggYW55IHF1ZXN0aW9ucyB5b3UgbWlnaHQgaGF2ZSByZWdhcmRpbmcgdGhpcyByZXF1ZXN0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkkgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHdlIHByb2NlZWQgd2l0aCBwcmVwYXJpbmcgeW91ciB0YXhlcywgd2Ugbm90aWNlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHJlbnRhbCBpbmNvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBleHBsb3JlIHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIG5lZWQgc29tZSBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGlzIHJlbnRhbCBpbmNvbWUuPC9wPlxyXG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPlRoZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSBnZW5lcmF0aW5nIHRoZSByZW50YWwgaW5jb21lLjwvbGk+XHJcbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gIDxsaT5Nb250aHMgdGhlIHByb3BlcnR5IHdhcyByZW50ZWQgb3V0LjwvbGk+XHJcbiAgPGxpPkFueSBwZXJpb2RzIG9mIHBlcnNvbmFsIHVzZSBvZiB0aGUgcmVudGFsIHByb3BlcnR5LjwvbGk+XHJcbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cclxuICA8bGk+RGV0YWlscyBvZiBhbnkgbWFqb3IgaW1wcm92ZW1lbnRzIG9yIHJlbm92YXRpb25zIGRvbmUgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XHJcbjxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHRoZXJlJ3MgYW55IG90aGVyIHdheSBJIGNhbiBhc3Npc3QsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBnZXQgaW4gdG91Y2guPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFkdmFuY2VkIFJlbnRcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBhZHZhbmNlZCByZW50IHJlY2VpdmVkOjwvc3Ryb25nPiBUaGUgc3VtIHRvdGFsIG9mIGFsbCByZW50IHBheW1lbnRzIHJlY2VpdmVkIGluIGFkdmFuY2UgKGNvdmVyaW5nIGZ1dHVyZSBwZXJpb2RzIGJleW9uZCB0aGUgY3VycmVudCBtb250aCkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIHBlcmlvZCBjb3ZlcmVkOjwvc3Ryb25nPiBUaGUgcmFuZ2Ugb2YgZGF0ZXMgKHN0YXJ0IGFuZCBlbmQpIHRoYXQgZWFjaCBhZHZhbmNlZCByZW50IHBheW1lbnQgY292ZXJzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgYWRkcmVzczo8L3N0cm9uZz4gVGhlIGFkZHJlc3Mgb2YgdGhlIHJlbnRhbCBwcm9wZXJ0eSBmb3Igd2hpY2ggdGhlIGFkdmFuY2VkIHJlbnQgd2FzIHBhaWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBwYXJ0aWFsIHJlZnVuZHMgaXNzdWVkOjwvc3Ryb25nPiBJZiBhbnkgcmVmdW5kcyB3ZXJlIGlzc3VlZCBhZ2FpbnN0IHRoZSBhZHZhbmNlZCByZW50cyByZWNlaXZlZCwgcGxlYXNlIHByb3ZpZGUgZGV0YWlscyBhbmQgcmVzcGVjdGl2ZSBhbW91bnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTGVhc2UgQ2FuY2VsbGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJMZWFzZSBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICA8bGk+PHN0cm9uZz5MZWFzZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgb3JpZ2luYWwgbGVhc2UgYWdyZWVtZW50IHdpdGggdGhlIHRlbmFudCB3aG8gcGFpZCB0byB0ZXJtaW5hdGUgdGhlaXIgbGVhc2UgZWFybHkuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBheW1lbnQgUmVjb3Jkczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvZiB0aGUgcGF5bWVudCByZWNlaXZlZCBmb3IgbGVhc2UgdGVybWluYXRpb24uIFRoaXMgY291bGQgaW5jbHVkZSBiYW5rIHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb24sIGEgcmVjZWlwdCBwcm92aWRlZCB0byB0aGUgdGVuYW50LCBvciBhbnkgd3JpdHRlbiBhZ3JlZW1lbnQgc3BlY2lmeWluZyB0aGUgYW1vdW50LjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gRXZpZGVuY2U6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBjb21tdW5pY2F0aW9uIGJldHdlZW4geW91IGFuZCB0aGUgdGVuYW50IHJlZ2FyZGluZyB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIGFuZCB0aGUgYWdyZWVtZW50IHRvIHRlcm1pbmF0ZSBlYXJseSwgaW5jbHVkaW5nIGVtYWlscyBvciBsZXR0ZXJzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhlc2UgZG9jdW1lbnRzIGFyZSBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgY29ycmVjdCB0YXggdHJlYXRtZW50IG9mIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gcGF5bWVudCB5b3UgcmVjZWl2ZWQuIFRoZXkgd2lsbCBoZWxwIHRvIGVuc3VyZSB0aGF0IHdlIHJlcG9ydCB5b3VyIGluY29tZSBhY2N1cmF0ZWx5IGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMuPC9wPlxyXG4gICAgPHA+PHN0cm9uZz5BY3Rpb24gUmVxdWlyZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLCBidXQgbm8gbGF0ZXIgdGhhbiBbc3BlY2lmaWMgZHVlIGRhdGVdLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb24uIFlvdSBtYXkgc2VuZCB0aGVtIHZpYSBlbWFpbCBhdCB0YXhAbGVuZGFoYW5kYWNjb3VudGluZy5jb20sIHVwbG9hZCB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQYWlkIEFkdmFuY2UgRXhwZW5zZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgbWFraW5nIHBheW1lbnRzIGZvciBpbnN1cmFuY2UgcHJlbWl1bXMgb3Igc2ltaWxhciBjb3N0cyByZWxhdGVkIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5LCB3aGljaCBjb3ZlciBwZXJpb2RzIGJleW9uZCB0aGUgY3VycmVudCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBwcmVwYWlkIGV4cGVuc2VzIGluIHlvdXIgdGF4IGZpbGluZ3MsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFBhaWQgRXhwZW5zZXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCByZWNlaXB0cywgaW52b2ljZXMsIG9yIGNvbnRyYWN0cyBzaG93aW5nIHRoZSBwYXltZW50IG9mIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGV4cGVuc2VzLiBUaGlzIHNob3VsZCBjbGVhcmx5IGluZGljYXRlIHRoZSBhbW91bnQgcGFpZCwgdGhlIGRhdGUgb2YgcGF5bWVudCwgYW5kIHRoZSBjb3ZlcmFnZSBwZXJpb2QuPC9saT5cclxuICA8bGk+PHN0cm9uZz5Db3ZlcmFnZSBQZXJpb2QgRGV0YWlsczo8L3N0cm9uZz4gV2UgbmVlZCBzcGVjaWZpYyBkZXRhaWxzIHJlZ2FyZGluZyB0aGUgY292ZXJhZ2UgcGVyaW9kIGZvciBlYWNoIGV4cGVuc2UuIFBsZWFzZSBpbmNsdWRlIGRvY3VtZW50YXRpb24gb3IgYSB3cml0dGVuIHN1bW1hcnkgdGhhdCBzcGVjaWZpZXMgdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIGNvdmVyYWdlIHBlcmlvZHMgdGhhdCBleHRlbmQgYmV5b25kIHRoZSBjdXJyZW50IHllYXIuPC9saT5cclxuICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB0aGUgYWRkcmVzcyBvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVudGFsIHByb3BlcnR5KGllcykgdG8gd2hpY2ggdGhlc2UgZXhwZW5zZXMgYXBwbHkuPC9saT5cclxuICA8bGk+PHN0cm9uZz5QdXJwb3NlIG9mIHRoZSBFeHBlbnNlOjwvc3Ryb25nPiBGb3IgZG9jdW1lbnRhdGlvbiBwdXJwb3NlcywgcHJvdmlkZSBhIGJyaWVmIGV4cGxhbmF0aW9uIG9mIHRoZSBuYXR1cmUgb2YgZWFjaCBleHBlbnNlIChlLmcuLCBwcm9wZXJ0eSBpbnN1cmFuY2UsIGxpYWJpbGl0eSBpbnN1cmFuY2UpLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlBsZWFzZSByZW1lbWJlciB0aGF0IGhhdmluZyBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIHdpbGwgYWlkIGluIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgY29ycmVjdGx5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMuPC9wPlxyXG48cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIHlvdXIgY29vcGVyYXRpb24gaW4gcHJvdmlkaW5nIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQmVuZWZpdCBWYWx1ZSBJbmNyZWFzZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQmVuZWZpdCBWYWx1ZSBJbmNyZWFzZVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyBuZWNlc3NhcnkgZG9jdW1lbnRzIGZvciB0YXggcHJlcGFyYXRpb24uIFxyXG4gICAgQXMgcGVyIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBwYXltZW50IGZvciBsb2NhbCBpbXByb3ZlbWVudHMgXHJcbiAgICBvciBzZXJ2aWNlcyB0aGF0IGRpcmVjdGx5IGluY3JlYXNlIHRoZSB2YWx1ZSBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0eSwgXHJcbiAgICB3ZSBuZWVkIGZ1cnRoZXIgZGV0YWlscyB0byBlbnN1cmUgdGhlIGFjY3VyYXRlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSBwcm92aWRlZCAoZS5nLiwgc3RyZWV0IHJlcGFpcnMsIG5ldyBzaWRld2Fsa3MpLjwvbGk+XHJcbiAgICAgICAgPGxpPkRhdGUocykgb2YgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cclxuICAgICAgICA8bGk+VG90YWwgY29zdCBhc3NvY2lhdGVkIHdpdGggZWFjaCBpbXByb3ZlbWVudCBvciBzZXJ2aWNlLjwvbGk+XHJcbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIChyZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBldGMuKS48L2xpPlxyXG4gICAgICAgIDxsaT5Bbnkgb2ZmaWNpYWwgbm90aWNlcyBvciBkb2N1bWVudGF0aW9uIGZyb20gdGhlIGxvY2FsIG11bmljaXBhbGl0eSByZWdhcmRpbmcgdGhlIGltcHJvdmVtZW50cyBvciBjaGFyZ2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPkRldGFpbHMgb2YgaG93IHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIHNwZWNpZmljYWxseSBiZW5lZml0ZWQgeW91ciByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMgYXNzb2NpYXRlZCB3aXRoIHByb3BlcnR5IHZhbHVlIGluY3JlYXNlcyBkdWUgdG8gbG9jYWwgaW1wcm92ZW1lbnRzIG9yIHNlcnZpY2VzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCByZXNwb25zZSBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGZhY2lsaXRhdGUgdGhlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50YXRpb24uPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZmVpdGVkIFNlY3VyaXR5IERlcG9zaXRcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmZlaXRlZCBTZWN1cml0eSBEZXBvc2l0XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydHMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGlhbnQsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91IGFuc3dlcmVkIDxzdHJvbmc+eWVzPC9zdHJvbmc+IHRvIGhhdmluZyBvbmUgb3IgbW9yZSB0ZW5hbnRzIHdobyBkaWQgbm90IGdldCB0aGVpciBzZWN1cml0eSBkZXBvc2l0IGJhY2sgdGhpcyB5ZWFyIGR1ZSB0byBlaXRoZXIgYnJlYWtpbmcgdGhlIGxlYXNlIHRlcm1zIG9yIGxlYXZpbmcgZGFtYWdlIHJlcXVpcmluZyByZXBhaXIuPC9wPlxyXG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPkEgbGlzdCBvZiBlYWNoIHRlbmFudCB3aG9zZSBzZWN1cml0eSBkZXBvc2l0IHdhcyBmb3JmZWl0ZWQsIGluY2x1ZGluZzo8L2xpPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5UZW5hbnQncyBuYW1lPC9saT5cclxuICAgICAgICAgIDxsaT5SZW50YWwgYWRkcmVzczwvbGk+XHJcbiAgICAgICAgICA8bGk+RGF0ZSBvZiBsZWFzZSB0ZXJtaW5hdGlvbjwvbGk+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3IgY29tbXVuaWNhdGlvbiBldmlkZW5jaW5nIHRoZSBmb3JmZWl0dXJlIHJlYXNvbiwgc3VjaCBhczo8L2xpPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgIDxsaT5Db3B5IG9mIHRoZSBsZWFzZSBhZ3JlZW1lbnQgc2hvd2luZyB0aGUgYnJlYWNoZWQgdGVybXM8L2xpPlxyXG4gICAgICAgICAgPGxpPlBob3RvcyBvciByZXBhaXIgaW52b2ljZXMgZm9yIGRhbWFnZXMgY2F1c2VkIGJ5IHRoZSB0ZW5hbnQ8L2xpPlxyXG4gICAgICAgICAgPGxpPkFueSB3cml0dGVuIG5vdGljZXMgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCByZWdhcmRpbmcgdGhlIGZvcmZlaXR1cmU8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IG9mIGVhY2ggZm9yZmVpdGVkIHNlY3VyaXR5IGRlcG9zaXQuPC9saT5cclxuICAgICAgPGxpPkFueSByZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcmVhc29ucyBmb3Igc2VjdXJpdHkgZGVwb3NpdCBmb3JmZWl0dXJlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGlzIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGluIGEgY2xlYXIgYW5kIG9yZ2FuaXplZCBtYW5uZXIgdG8gZmFjaWxpdGF0ZSBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOb24tQ2FzaCBSZW50XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJOb24tQ2FzaCBSZW50XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RlIGZyb20geW91ciBlYXJsaWVyIHJlc3BvbnNlcyB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIG5vbi1jYXNoIGZvcm1zIG9mIHBheW1lbnQgaW4gbGlldSBvZiByZW50IHRoaXMgeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlc2UgdHJhbnNhY3Rpb25zLiBLaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cclxuICAgIDxvbD5cclxuICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIFNlcnZpY2Ugb3IgR29vZHMgUmVjZWl2ZWQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHNlcnZpY2UsIGdvb2RzLCBvciBwcm9wZXJ0eSB5b3UgcmVjZWl2ZWQgYXMgcmVudCBwYXltZW50LiBGb3IgaW5zdGFuY2UsIFwiUmVwYWlyIHNlcnZpY2VzIGZvciB0aGUga2l0Y2hlbiBwbHVtYmluZ1wiIG9yIFwiYSBsYXB0b3AgY29tcHV0ZXJcIi48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+VmFsdWUgRXN0aW1hdGlvbjo8L3N0cm9uZz4gQW4gZXN0aW1hdGVkIHZhbHVlIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgcmVjZWl2ZWQgYXQgdGhlIHRpbWUgb2YgdGhlIHRyYW5zYWN0aW9uLiBJZiBwb3NzaWJsZSwgaW5jbHVkZSBhbnkgZG9jdW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzIHRoaXMgdmFsdWF0aW9uLCBzdWNoIGFzIHJlY2VpcHRzLCBpbnZvaWNlcywgb3Igd3JpdHRlbiBhZ3JlZW1lbnRzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBTcGVjaWZpYyBkYXRlKHMpIHdoZW4geW91IHJlY2VpdmVkIHRoZXNlIGdvb2RzIG9yIHNlcnZpY2VzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5JbmZvcm1hdGlvbiBhYm91dCB0aGUgVGVuYW50IG9yIFByb3ZpZGVyOjwvc3Ryb25nPiBOYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IHByb3ZpZGVkIHRoZSBnb29kcyBvciBzZXJ2aWNlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+QW55IEZvcm1hbCBBZ3JlZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IHdyaXR0ZW4gYWdyZWVtZW50cyBvciBjb250cmFjdHMgdGhhdCBvdXRsaW5lIHRoaXMgYXJyYW5nZW1lbnQuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPlJlY2VpcHRzIG9yIERvY3VtZW50YXRpb24gb2YgdGhlIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBBbnkgcmVjZWlwdHMsIGludm9pY2VzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgZXZpZGVuY2VzIHRoZSBleGNoYW5nZS48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCBsYXdzIGFuZCBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSB3aWxsIGdyZWF0bHkgYXNzaXN0IGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb24gZWZmaWNpZW50bHkuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBQcm9wZXJ0eSBEZXByZWNpYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBQcm9wZXJ0eSBEZXByZWNpYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGFjY291bnRzLCB3ZSd2ZSBub3RlZCB0aGF0IGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQgYXMgcGFydCBvZiB0aGVpciB0YXggdHJlYXRtZW50IGluIG91ciBmaW5hbmNpYWwgcmVjb3Jkcy4gVGhpcyBtZXRob2QgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgZmluYW5jaWFsIHJlcG9ydGluZyBhbmQgdGF4IGVmZmljaWVuY3kuIEhvd2V2ZXIsIGl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB0aGVyZSBtYXkgYmUgZGlzY3JlcGFuY2llcyBvciB1cGRhdGVzIHJlcXVpcmVkIGluIG91ciByZWNvcmRzIHJlZ2FyZGluZyB0aGUgZGVwcmVjaWF0aW9uIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxyXG4gICAgPHA+VG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgZmluYW5jaWFsIGFuZCB0YXggcmVwb3J0aW5nLCB3ZSBraW5kbHkgcmVxdWVzdCB5b3VyIGFzc2lzdGFuY2UgaW4gdmVyaWZ5aW5nIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIHdpdGggcmVnYXJkcyB0byBkZXByZWNpYXRpb24uPC9wPlxyXG4gICAgPG9sPlxyXG4gICAgPGxpPkNvbmZpcm0gd2hldGhlciBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgYmVpbmcgZGVwcmVjaWF0ZWQgaW4gb3VyIGJvb2tzLiBJZiB0aGlzIGlzIGFjY3VyYXRlLCBubyBhY3Rpb24gaXMgcmVxdWlyZWQgb24geW91ciBwYXJ0LjwvbGk+XHJcbiAgICA8bGk+SWYgdGhlcmUgYXJlIGFueSByZW50YWwgcHJvcGVydGllcyA8c3Ryb25nPm5vdDwvc3Ryb25nPiBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQsIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBmb3IgZWFjaCBwcm9wZXJ0eTo8L2xpPlxyXG4gICAgICAgIDx1bD5cclxuICAgICAgICAgICAgPGxpPlByb3BlcnR5IEFkZHJlc3M8L2xpPlxyXG4gICAgICAgICAgICA8bGk+RGF0ZSBvZiBQdXJjaGFzZTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5QdXJjaGFzZSBQcmljZTwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5SZWFzb24gZm9yIE5vbi1EZXByZWNpYXRpb248L2xpPlxyXG4gICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcmVsZXZhbnQgaW5mb3JtYXRpb248L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgdG8gdGhpcyByZXF1ZXN0IGlzIGhpZ2hseSBhcHByZWNpYXRlZCBhbmQgZXNzZW50aWFsIGZvciBlbnN1cmluZyB0aGF0IHlvdXIgZmluYW5jaWFsIHJlY29yZHMgYWNjdXJhdGVseSByZWZsZWN0IHlvdXIgdGF4IG9ibGlnYXRpb25zIGFuZCBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcmV2aXNpb25zIGFuZCB1cGRhdGVzIGFzIG5lY2Vzc2FyeS48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IGluIG1haW50YWluaW5nIHByZWNpc2UgYW5kIGNvbXBsaWFudCBmaW5hbmNpYWwgcmVjb3Jkcy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBSZXBhaXJzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgUmVwYWlyc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgbmVjZXNzYXJ5IHJlcGFpcnMgdG8geW91ciByZW50YWwgcHJvcGVydHkgdG8ga2VlcCBpdCBpbiBnb29kIHdvcmtpbmcgY29uZGl0aW9uLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBleHBlbnNlcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSB0YXggYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYWxsIHJlcGFpcnMgbWFkZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBQbGVhc2UgaW5jbHVkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBuYXR1cmUgb2YgZWFjaCByZXBhaXIgKGUuZy4sIGZpeGluZyBsZWFrcywgcGFpbnRpbmcsIHJlcGFpcmluZyBhcHBsaWFuY2VzKS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBkYXRlIGVhY2ggcmVwYWlyIHdhcyBjb21wbGV0ZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5UaGUgbG9jYXRpb24vYWRkcmVzcyBvZiB0aGUgcHJvcGVydHkgd2hlcmUgcmVwYWlycyB3ZXJlIG1hZGUuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgZWFjaCByZXBhaXIgbWFkZS4gVGhpcyBzaG91bGQgaW5jbHVkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRoZSBzZXJ2aWNlIHByb3ZpZGVy4oCZcyBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGZvciBlYWNoIHJlcGFpci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIG1ldGhvZCBvZiBwYXltZW50IHVzZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5JZiBhbnkgcmVwYWlycyB3ZXJlIG1hZGUgYnkgeW91cnNlbGYgb3IgYW4gdW5saWNlbnNlZCBjb250cmFjdG9yLCBwbGVhc2UgcHJvdmlkZTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGNvc3Qgb2YgbWF0ZXJpYWxzIHB1cmNoYXNlZCwgc3VwcG9ydGVkIGJ5IHJlY2VpcHRzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VGhlIGVzdGltYXRlZCBudW1iZXIgb2YgaG91cnMgc3BlbnQgb24gZWFjaCByZXBhaXIsIGFsb25nIHdpdGggYSByZWFzb25hYmxlIGhvdXJseSByYXRlIGZvciBsYWJvci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgcmVsYXRlZCB0byBwcm9wZXJ0eSByZXBhaXIgZXhwZW5zZXMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QgYW5kIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbXByb3ZlbWVudHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlbnRhbCBJbXByb3ZlbWVudHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIG1hZGUgdXBncmFkZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhlc2UgaW1wcm92ZW1lbnRzIGludG8geW91ciB0YXggZG9jdW1lbnRhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBFYWNoIEltcHJvdmVtZW50Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggdXBncmFkZSBvciBlbmhhbmNlbWVudCBtYWRlIHRvIHRoZSBwcm9wZXJ0eS4gVGhpcyBjb3VsZCBpbmNsdWRlIHJlbm92YXRpb25zLCBhZGRpdGlvbnMsIG9yIGFueSB1cGdyYWRlcyB0aGF0IGhhdmUgaW5jcmVhc2VkIGl0cyB2YWx1ZSwgZXh0ZW5kZWQgaXRzIGxpZmVzcGFuLCBvciBhZGFwdGVkIGl0IHRvIG5ldyB1c2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSBvciByYW5nZSBvZiBkYXRlcyB3aGVuIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBzdGFydGVkIGFuZCBjb21wbGV0ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0cyBJbnZvbHZlZDo8L3N0cm9uZz4gRGV0YWlsZWQgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIGltcHJvdmVtZW50IHByb2plY3QuIFRoaXMgaW5jbHVkZXMgbWF0ZXJpYWxzLCBsYWJvciwgcGVybWl0cywgYW5kIGFueSBvdGhlciByZWxldmFudCBjb3N0cy4gUGxlYXNlIHByb3ZpZGUgaXRlbWl6ZWQgcmVjZWlwdHMgb3IgaW52b2ljZXMgaWYgYXZhaWxhYmxlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gQ29waWVzIG9mIGNhbmNlbGxlZCBjaGVja3MsIGJhbmsgc3RhdGVtZW50cywgb3IgZWxlY3Ryb25pYyBwYXltZW50IGNvbmZpcm1hdGlvbnMgdGhhdCBwcm92ZSBwYXltZW50IGZvciB0aGUgaW1wcm92ZW1lbnRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmVmb3JlIGFuZCBBZnRlciBQaWN0dXJlczo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBwaG90b2dyYXBocyBvZiB0aGUgcHJvcGVydHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZS4gVGhpcyBoZWxwcyBpbiBzdWJzdGFudGlhdGluZyB0aGUgZW5oYW5jZW1lbnQgdG8geW91ciBwcm9wZXJ0eSdzIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udHJhY3RvciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgY29udHJhY3RvcnMgd2VyZSB1c2VkLCBwbGVhc2UgcHJvdmlkZSB0aGVpciBidXNpbmVzcyBuYW1lcywgYWRkcmVzc2VzLCBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wdXRpbmcgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGJlbmVmaXRzIHRoYXQgbWF5IGJlIGFwcGxpY2FibGUgdG8geW91IGFzIGEgcmVzdWx0IG9mIHRoZXNlIHByb3BlcnR5IGltcHJvdmVtZW50cy4gUGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBnYXRoZXJlZCBhbmQgc3VibWl0dGVkIGJ5IFtzcGVjaWZpYyBkYXRlXSwgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxyXG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBBY3Rpdml0eSBQYXJ0aWNpcGF0aW9uXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgd2UgbW92ZSBmb3J3YXJkIHdpdGggeW91ciB0YXggcHJlcGFyYXRpb24sIGl0IGhhcyBiZWNvbWUgbmVjZXNzYXJ5IHRvIGNvbGxlY3QgYSBiaXQgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBhY3RpdmUgcGFydGljaXBhdGlvbiBpbiByZW50YWwgcHJvcGVydHkgYWN0aXZpdGllcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBwYXNzaW5nIHNwZWNpZmljIHRheCB0ZXN0cyB0aGF0IGFwcGx5IHRvIGluZGl2aWR1YWxzIGFjdGl2ZWx5IGludm9sdmVkIGluIHRoZWlyIHJlbnRhbCBwcm9wZXJ0aWVzLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBkZXRhaWxzIHRvIGVuc3VyZSB3ZSBtZWV0IGFsbCByZXF1aXJlbWVudHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB5b3VyIGFjdGl2ZSByb2xlcyB0aGlzIHRheCB5ZWFyLiBUaGlzIGluY2x1ZGVzIG1ha2luZyBkZWNpc2lvbnMgc3VjaCBhcyBhcHByb3ZpbmcgbmV3IHRlbmFudHMsIHNldHRpbmcgcmVudGFsIHRlcm1zLCBvciBhdXRob3JpemluZyByZXBhaXJzIGFuZCBtYWludGVuYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRpbWUgU3BlbnQ6PC9zdHJvbmc+IEFuIGVzdGltYXRlZCBudW1iZXIgb2YgaG91cnMgeW91IHBlcnNvbmFsbHkgc3BlbnQgb24gYWN0aXZpdGllcyByZWxhdGVkIHRvIHRoZSBtYW5hZ2VtZW50IGFuZCBkZWNpc2lvbi1tYWtpbmcgb2YgeW91ciByZW50YWwgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgTWFuYWdlbWVudCBFbmdhZ2VtZW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgZW5nYWdlZCB3aXRoIGEgcHJvcGVydHkgbWFuYWdlciwgYSBkZXNjcmlwdGlvbiBvZiB0aGVpciByb2xlIHZlcnN1cyB0aGUgdGFza3MgeW91IHBlcnNvbmFsbHkgaGFuZGxlIHdvdWxkIGJlIGhlbHBmdWwuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZWFsIEVzdGF0ZSBQcm9mZXNzaW9uYWxcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJlYWwgRXN0YXRlIFByb2Zlc3Npb25hbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIEFubnVhbCBXb3JraW5nIEhvdXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIHN1bW1hcnkgb2YgeW91ciB0b3RhbCB3b3JraW5nIGhvdXJzIHRoaXMgeWVhciwgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGhvdXJzIGRlZGljYXRlZCB0byByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkxpc3Qgb2YgUHJvcGVydGllczo8L3N0cm9uZz4gQSBsaXN0IG9mIHByb3BlcnRpZXMgeW91IGhhdmUgbWFuYWdlZCwgc29sZCwgb3IgYXJlIGN1cnJlbnRseSBzZWxsaW5nLCBpbmNsdWRpbmcgdGhlaXIgbG9jYXRpb24gYW5kIHRoZSBuYXR1cmUgb2YgeW91ciBpbnZvbHZlbWVudC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgSm9iIERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGJyaWVmIG91dGxpbmUgb2YgeW91ciByb2xlKHMpIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMsIHNwZWNpZnlpbmcgd2hldGhlciB5b3VyIGludm9sdmVtZW50IGlzIHByaW1hcmlseSBhcyBhIGJyb2tlciwgYWdlbnQsIHByb3BlcnR5IG1hbmFnZXIsIGV0Yy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+Q2FsZW5kYXIgb3IgU2NoZWR1bGU6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYSBjYWxlbmRhciBvciBzY2hlZHVsZSByZWZsZWN0aW5nIHlvdXIgcmVhbCBlc3RhdGUgYWN0aXZpdGllcyB0aHJvdWdob3V0IHRoZSB5ZWFyIHRvIGhlbHAgY29ycm9ib3JhdGUgdGhlIHRpbWUgc3BlbnQgaW4gdGhlc2UgYWN0aXZpdGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlBhcnRpYWwgUmVudGFsIFByb3BlcnR5XCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGxldHRpbmcgdXMga25vdyB0aGF0IHlvdSByZW50ZWQgb3V0IGEgcG9ydGlvbiBvZiB5b3VyIHByb3BlcnR5IHRoaXMgdGF4IHllYXIgd2hpbGUgdXNpbmcgdGhlIHJlc3QgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLiBUbyBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJucyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBiZXN0IHRheCBhZHZhbnRhZ2VzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgcGFydGlhbCByZW50YWwgcHJvcGVydHk6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERldGFpbHM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5Db21wbGV0ZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSByZW50ZWQgcG9ydGlvbiBhbmQgdGhlIHBlcnNvbmFsIHVzZSBwb3J0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgQWdyZWVtZW50Ojwvc3Ryb25nPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlN0YXJ0IGFuZCBlbmQgZGF0ZXMgb2YgdGhlIHJlbnRhbCBwZXJpb2Qgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEluY29tZTo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGFkdmFuY2UgcmVudCBvciBzZWN1cml0eSBkZXBvc2l0cyBub3QgcmV0dXJuZWQgdG8gdGhlIHRlbmFudC48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZXM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZXhwZW5zZXMgZm9yIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyByZXBhaXJzLCB1dGlsaXRpZXMsIGluc3VyYW5jZSwgYW5kIHByb3BlcnR5IHRheGVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+SW5mb3JtYXRpb24gb24gZXhwZW5zZXMgc2hhcmVkIGJldHdlZW4gdGhlIHJlbnRhbCBhbmQgcGVyc29uYWwgdXNlIHBvcnRpb25zLCBhbmQgaG93IHRoZXkgYXJlIGRpdmlkZWQuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlVzZSBvZiBQcm9wZXJ0eTo8L3N0cm9uZz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VG90YWwgbnVtYmVyIG9mIGRheXMgcmVudGVkIGF0IGZhaXIgcmVudGFsIHZhbHVlLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIFJlcGFpcnM6PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgb3IgcmVwYWlycyBtYWRlIHNwZWNpZmljYWxseSBpbiB0aGUgcmVudGFsIHBvcnRpb24gYW5kIHRoZSBjb3N0IGludm9sdmVkLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5QbGVhc2UgZ2F0aGVyIHRoZXNlIGRldGFpbHMgYW5kIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBUaGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB0aGlzIGluZm9ybWF0aW9uIGFyZSBjcnVjaWFsIGZvciBjb3JyZWN0IHRheCBmaWxpbmcgYW5kIG9wdGltaXppbmcgeW91ciBwb3RlbnRpYWwgZGVkdWN0aW9ucyBhbmQgdGF4IGJlbmVmaXRzLjwvcD5cclxuICAgIDxwPkRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB1c2luZyB5b3VyIHJlbnRhbCBwcm9wZXJ0eSBmb3IgcGVyc29uYWwgcHVycG9zZXMgZHVyaW5nIHRoZSBsYXN0IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3Nlczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlciBvZiBkYXlzIGR1cmluZyB0aGUgdGF4IHllYXIgd2hlbiB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYnkgeW91LCB5b3VyIGZhbWlseSwgb3IgZnJpZW5kcyB3aXRob3V0IGNoYXJnaW5nIHJlbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBkYXlzIHJlbnRlZCBhdCBmYWlyIHJlbnRhbCBwcmljZTo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgbnVtYmVyIG9mIGRheXMgdGhlIHByb3BlcnR5IHdhcyBhY3R1YWxseSByZW50ZWQgb3V0IHRvIHRlbmFudHMgYXQgYSBmYWlyIHJlbnRhbCBwcmljZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIHRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIgZm9yIHRoaXMgcHJvcGVydHkuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgZXhwZW5zZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgdGhlIHByb3BlcnR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzaW5nLCBjbGVhbmluZyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBwcm9wZXJ0eSB0YXhlcywgbW9ydGdhZ2UgaW50ZXJlc3QsIGFuZCBhbnkgcmVwYWlycy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgZGF0ZXM6PC9zdHJvbmc+IExpc3QgYW55IGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBwcm9wZXJ0eSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBhbG9uZyB3aXRoIHRoZSBkYXRlIG9mIGltcHJvdmVtZW50IGFuZCB0aGUgY29zdC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IFRheCBTdGF0ZW1lbnQgYW5kIE1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudDo8L3N0cm9uZz4gQXR0YWNoIGEgY29weSBvZiB5b3VyIGFubnVhbCBwcm9wZXJ0eSB0YXggc3RhdGVtZW50IGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCBzdGF0ZW1lbnQgZm9yIHRoaXMgcHJvcGVydHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBwb3J0aW9uIG9mIGV4cGVuc2VzIHRoYXQgY2FuIGJlIGRlZHVjdGVkIGFuZCByZXBvcnQgeW91ciBpbmNvbWUgYWNjdXJhdGVseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBjb3VudHMgYXMgcGVyc29uYWwgdXNlIHZlcnN1cyByZW50YWwgdXNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPiAgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBQZXJzb25hbCBVc2UgUmVudGFsXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVudGluZyBvdXQgcGFydCBvZiB5b3VyIHByb3BlcnR5IGZvciBwcm9maXQsIHdoaWxlIGFsc28gdXNpbmcgaXQgaW4gYSBtYW5uZXIgdGhhdCBtYXkgY2xhc3NpZnkgaXQgYXMgeW91ciByZXNpZGVuY2UuIFRvIGFjY3VyYXRlbHkgY2FwdHVyZSBhbGwgaW5mb3JtYXRpb24gYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMsIHJlbnRhbCBwZXJpb2QsIGFuZCBwYXltZW50IGRldGFpbHMuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEluY29tZSBSZWNvcmRzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIG9mIGFsbCByZW50YWwgaW5jb21lIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBSZWNlaXB0cyBhbmQgcmVjb3JkcyBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgYWN0aXZpdHkuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcmVwYWlycywgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBhbmQgcHJvcGVydHkgbWFuYWdlbWVudCBmZWVzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIFVzZSBEZXRhaWxzOjwvc3Ryb25nPiBBIGxvZyBvciBjYWxlbmRhciBkb2N1bWVudGluZyB0aGUgc3BlY2lmaWMgZGF5cyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGFuZCBub3QgcmVudGVkIG91dC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBUYXggYW5kIE1vcnRnYWdlIEludGVyZXN0IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBwcm9wZXJ0eSB0YXggc3RhdGVtZW50cyBhbmQgbW9ydGdhZ2UgaW50ZXJlc3Qgc3RhdGVtZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIERlcHJlY2lhdGlvbjo8L3N0cm9uZz4gUmVjb3JkcyBvZiBhbnkgcHJvcGVydHkgaW1wcm92ZW1lbnRzIG9yIGRlcHJlY2lhdGlvbiBzY2hlZHVsZXMgaWYgcHJldmlvdXNseSBjbGFpbWVkIG9uIHlvdXIgdGF4IHJldHVybnMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCBpcyBjcnVjaWFsIHRoYXQgd2UgaGF2ZSBhbGwgdGhlIG5lY2Vzc2FyeSBkb2N1bWVudHMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBkaXJlY3RseSBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUm95YWx0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlJveWFsdHkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHlvdSd2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIHBheW1lbnRzIHRoYXQgY291bGQgYmUgY29uc2lkZXJlZCByb3lhbHR5IGluY29tZSB0aGlzIHBhc3QgeWVhci4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWxsIEZvcm1zIDEwOTktTUlTQzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFueSAxMDk5LU1JU0MgZm9ybXMgcmVjZWl2ZWQgZm9yIHJveWFsdHkgcGF5bWVudHMuIEluY2x1ZGUgdGhvc2UgZnJvbSB0cmFkaXRpb25hbCBzb3VyY2VzIGxpa2UgcGF0ZW50cywgY29weXJpZ2h0cywgYW5kIG1pbmVyYWwgcmlnaHRzLCBhcyB3ZWxsIGFzIGFueSBmcm9tIGRpZ2l0YWwgY29udGVudCBwbGF0Zm9ybXMgc3VjaCBhcyBVZGVteSwgWW91VHViZSwgZXRjLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgU3RhdGVtZW50IG9mIEVhcm5pbmdzOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZSByb3lhbHR5IGluY29tZSBmcm9tIHNvdXJjZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIDEwOTktTUlTQywgb3IgaW4gYWRkaXRpb24gdG8gdGhvc2UgdGhhdCBkbywgd2UgbmVlZCBhIGRldGFpbGVkIHN0YXRlbWVudCBvciBsb2cgb2YgdGhlc2UgZWFybmluZ3MuIFRoaXMgc2hvdWxkIGluY2x1ZGUgZGF0ZXMsIGFtb3VudHMsIGFuZCBzb3VyY2VzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhwZW5zZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnZW5lcmF0aW9uIG9mIHRoaXMgcm95YWx0eSBpbmNvbWUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFya2V0aW5nLCBwcm9kdWN0aW9uLCBhbmQgbGVnYWwgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHJlY2VpcHRzLCBpbnZvaWNlcywgb3IgYSBkZXRhaWxlZCBleHBlbnNlIGxvZy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRpZ2l0YWwgQ29udGVudCBQbGF0Zm9ybSBSZXBvcnRzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGFueSB5ZWFyLWVuZCBzdW1tYXJ5IHJlcG9ydHMgb3IgaW5jb21lIHN0YXRlbWVudHMgcHJvdmlkZWQgYnkgZGlnaXRhbCBwbGF0Zm9ybXMgd2hlcmUgeW91ciBjb250ZW50IGlzIGhvc3RlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaG9sZGluZyBOb3RpY2VzOjwvc3Ryb25nPiBJZiB0YXggd2FzIHdpdGhoZWxkIGZyb20gYW55IG9mIHlvdXIgcm95YWx0eSBwYXltZW50cywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciBub3RpY2VzIGluZGljYXRpbmcgdGhlIGFtb3VudCB3aXRoaGVsZC48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHByZXBhcmF0aW9uIGlzIGJvdGggYWNjdXJhdGUgYW5kIG1heGltaXplZCBmb3IgeW91ciBiZW5lZml0LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgaXRlbXMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvdGVsIE1vdGVsIEJlZCBCcmVha2Zhc3RcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkhvdGVsIE1vdGVsIEJlZCBCcmVha2Zhc3RcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBvd25pbmcgcmVudGFsIHByb3BlcnRpZXMgdGhhdCBvcGVyYXRlIGFzIGEgSG90ZWwsIE1vdGVsLCBCZWQgYW5kIEJyZWFrZmFzdCwgb3Igb2ZmZXIgc2hvcnQtdGVybSBhY2NvbW1vZGF0aW9ucyBzaW1pbGFyIHRvIEFpcmJuYi4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHNlcnZpY2UgYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwcm9wZXJ0eSB5b3UgcmVudCBvdXQgb24gYSBzaG9ydC10ZXJtIGJhc2lzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHRoZXNlIHByb3BlcnRpZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcmVudGFsIGluY29tZSwgY2xlYW5pbmcgZmVlcywgYW5kIGFueSBvdGhlciBjaGFyZ2VzIHRvIHJlbnRlcnMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IENvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcyBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIGluc3VyYW5jZSwgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgbWFuYWdlbWVudCBmZWVzLCBhbmQgYWR2ZXJ0aXNpbmcgY29zdHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PY2N1cGFuY3kgSW5mb3JtYXRpb246PC9zdHJvbmc+IE51bWJlciBvZiBkYXlzIGVhY2ggcHJvcGVydHkgd2FzIHJlbnRlZCBvdXQgZHVyaW5nIHRoZSB5ZWFyLCBhcyB3ZWxsIGFzIHRoZSBudW1iZXIgb2YgZGF5cyBpdCB3YXMgdXNlZCBmb3IgcGVyc29uYWwgcHVycG9zZXMsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5MZWdhbCBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IGxvY2FsIGxpY2Vuc2VzLCBwZXJtaXRzLCBvciByZWdpc3RyYXRpb25zIHJlcXVpcmVkIGZvciBvcGVyYXRpbmcgdGhlc2UgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5UaGlzIGxpc3QgaXMgbm90IGV4aGF1c3RpdmUsIGFuZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG1heSBiZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcmVwbHkgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWQgdGhlbSBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC4gWW91ciBwcm9tcHQgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgZXNzZW50aWFsIGZvciB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XHJcbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIGNob29zaW5nIG91ciBzZXJ2aWNlcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBSZWNvdmVyeVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBSZWNvdmVyeVwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcmVjZW50IGNvbmZpcm1hdGlvbiByZWdhcmRpbmcgcmVjZWl2aW5nIHBheW1lbnRzIG9yIHJlZnVuZHMgY29uc2lkZXJlZCBhICdUYXhhYmxlIFJlY292ZXJ5JyBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBpbmNvcnBvcmF0ZSB0aGlzIGludG8geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscy4gQ291bGQgeW91IHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxiPkFtb3VudCBvZiBUYXhhYmxlIFJlY292ZXJ5OjwvYj4gVGhlIHRvdGFsIHN1bSBvZiBhbGwgcGF5bWVudHMgb3IgcmVmdW5kcyByZWNlaXZlZCB0aGF0IGFyZSBjbGFzc2lmaWVkIGFzIHRheGFibGUgcmVjb3ZlcnkuPC9saT5cclxuICA8bGk+PGI+U291cmNlIERvY3VtZW50YXRpb246PC9iPiBQbGVhc2UgcHJvdmlkZSBhbnkgb2ZmaWNpYWwgc3RhdGVtZW50cyBvciBkb2N1bWVudHMgY29uZmlybWluZyB0aGVzZSBwYXltZW50cyBvciByZWZ1bmRzLiBUaGlzIGNvdWxkIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzLCByZWZ1bmQgb3IgY29tcGVuc2F0aW9uIGxldHRlcnMsIG9yIGFueSBvdGhlciByZWxldmFudCBkb2N1bWVudGF0aW9uLjwvbGk+XHJcbiAgPGxpPjxiPk5hdHVyZSBvZiB0aGUgT3JpZ2luYWwgRGVkdWN0aW9uIG9yIENyZWRpdDo8L2I+IEEgYnJpZWYgZXhwbGFuYXRpb24gb3IgZG9jdW1lbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgZXhwZW5zZSBvciBpbnZlc3RtZW50IHRoYXQgbGVkIHRvIHRoZSB0YXhhYmxlIHJlY292ZXJ5LiBUaGlzIGluY2x1ZGVzIHRoZSB0YXggeWVhciBvZiB0aGUgZGVkdWN0aW9uIG9yIGNyZWRpdC48L2xpPlxyXG4gIDxsaT48Yj5EYXRlIFJlY2VpdmVkOjwvYj4gVGhlIHNwZWNpZmljIGRhdGVzIHdoZW4gdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcyB3ZXJlIHJlY2VpdmVkLjwvbGk+XHJcbiAgPGxpPjxiPkFueSBSZWxhdGVkIEV4cGVuc2UgRG9jdW1lbnRhdGlvbjo8L2I+IElmIHRoZXJlIHdlcmUgYW55IGV4cGVuc2VzIGluY3VycmVkIHRvIHJlY2VpdmUgdGhpcyByZWNvdmVyeSAoc3VjaCBhcyBsZWdhbCBmZWVzKSwgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbi48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciB1cyB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuIElmIHlvdSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0YXhhYmxlIHJlY292ZXJpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSBpbnN0YW5jZS48L3A+XHJcbjxwPlBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbi4gV2UgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoZSB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBBbGltb255XCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIEFsaW1vbnlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbiBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBhbGltb255IHBheW1lbnRzIGluIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jbHVkZSB0aGlzIGluIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBkYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L3A+XHJcbiAgICA8cD5BbGltb255IHBheW1lbnRzIGFyZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lIGZvciB0aGUgcmVjZWl2ZXIgZGVwZW5kaW5nIG9uIHRoZSBkYXRlIG9mIHRoZSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LiBEaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50cyBleGVjdXRlZCBhZnRlciBEZWNlbWJlciAzMSwgMjAxOCwgZG8gbm90IGNvdW50IGFsaW1vbnkgcGF5bWVudHMgYXMgdGF4YWJsZSBpbmNvbWUuPC9wPlxyXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHBheW1lbnRzOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudDo8L3N0cm9uZz4gVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFsaW1vbnkgcGF5bWVudHMgeW91IHJlY2VpdmVkIGFyZSB0YXhhYmxlLiBQbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgdGhlIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZCB0aGlzIHRheCB5ZWFyOjwvc3Ryb25nPiBUb3RhbCBhbm51YWwgYW1vdW50IHJlY2VpdmVkIGluIGFsaW1vbnkgcGF5bWVudHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz4gQmFuayBzdGF0ZW1lbnRzLCB0cmFuc2ZlciByZWNlaXB0cywgb3IgYW55IGxlZ2FsIGRvY3VtZW50cyBzaG93aW5nIHRoZSBhbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlBheWVy4oCZcyBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gRnVsbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBwZXJzb24gZnJvbSB3aG9tIHlvdSBoYXZlIHJlY2VpdmVkIHRoZSBhbGltb255IHBheW1lbnRzLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGlzIGNydWNpYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHb3Zlcm5tZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJHb3Zlcm5tZW50IEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVwb3J0ZWQgcmVjZWl2aW5nIGdvdmVybm1lbnQgYmVuZWZpdHMgdGhhdCBtYXkgYmUgdGF4YWJsZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGZpbGluZywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgPGxpPjxzdHJvbmc+Rm9ybSAxMDk5LUc6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgY29weSBvZiBGb3JtIDEwOTktRyBmb3IgZWFjaCBpbnN0YW5jZSBvZiBnb3Zlcm5tZW50IGJlbmVmaXRzIHJlY2VpdmVkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IGlzc3VlZCBmb3IgdW5lbXBsb3ltZW50IGNvbXBlbnNhdGlvbiwgc3RhdGUgb3IgbG9jYWwgaW5jb21lIHRheCByZWZ1bmRzLCBjcmVkaXRzIG9yIG9mZnNldHMsIGFuZCBvdGhlciBnb3Zlcm5tZW50IHBheW1lbnRzLjwvbGk+XHJcbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIGxpc3Qgb2YgYmVuZWZpdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBnb3Zlcm5tZW50IGJlbmVmaXRzIG5vdCByZXBvcnRlZCBvbiBGb3JtIDEwOTktRyAoc3VjaCBhcyBjZXJ0YWluIHdlbGZhcmUgYmVuZWZpdHMpLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3QgaW5jbHVkaW5nIHRoZSB0eXBlIG9mIGJlbmVmaXQsIGFtb3VudCByZWNlaXZlZCwgYW5kIHRoZSBhZ2VuY3kgdGhhdCBwcm92aWRlZCB0aGUgYmVuZWZpdC48L2xpPlxyXG4gICAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdHM6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMsIGluY2x1ZGUgeW91ciBTU0EtMTA5OSBvciBSUkItMTA5OSBmb3JtIHdoaWNoIHJlcG9ydHMgdGhlc2UgZWFybmluZ3MuPC9saT5cclxuICAgICAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBmb3IgYW55IHdpdGhoZWxkIHRheGVzOjwvc3Ryb25nPiBJZiB0YXhlcyB3ZXJlIHdpdGhoZWxkIGZyb20gYW55IGJlbmVmaXRzIHJlY2VpdmVkLCBpbmNsdWRlIHRoZSBhcHBsaWNhYmxlIGRvY3VtZW50YXRpb24gc2hvd2luZyB0aGUgYW1vdW50IHdpdGhoZWxkLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+UGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgcHJvY2Vzc2VkIHRpbWVseSBhbmQgY29ycmVjdGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhcyB3ZSBwcm9jZWVkIHdpdGggcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gQXMgeW91J3ZlIGluZGljYXRlZCByZWNlaXB0IG9mIFNvY2lhbCBTZWN1cml0eSBiZW5lZml0cyB0aGlzIHRheCB5ZWFyLCB3ZSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzL2luZm9ybWF0aW9uIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdGF4IGZpbGluZzo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdCBTdGF0ZW1lbnQgKEZvcm0gU1NBLTEwOTkpPC9zdHJvbmc+IC0gVGhpcyBmb3JtIGRldGFpbHMgdGhlIHRvdGFsIGFtb3VudCBvZiBzb2NpYWwgc2VjdXJpdHkgYmVuZWZpdHMgcmVjZWl2ZWQuIElmIHlvdSBoYXZlIG1pc3BsYWNlZCB0aGlzIGZvcm0sIGl0IGNhbiBiZSBvYnRhaW5lZCBvbmxpbmUgdGhyb3VnaCB5b3VyIFNvY2lhbCBTZWN1cml0eSBhY2NvdW50LjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ob3RpY2Ugb2YgQWRqdXN0ZWQgQW1vdW50PC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIElmIHRoZXJlIGhhdmUgYmVlbiBhbnkgYWRqdXN0bWVudHMgb3IgY29ycmVjdGlvbnMgdG8geW91ciBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMgZHVyaW5nIHRoZSB5ZWFyLCBwbGVhc2UgcHJvdmlkZSBhbnkgbm90aWNlcyBvciBkb2N1bWVudGF0aW9uIHJlZmxlY3RpbmcgdGhlc2UgY2hhbmdlcy48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+U3VwcGxlbWVudGFsIFNlY3VyaXR5IEluY29tZSAoU1NJKTwvc3Ryb25nPiAoaWYgYXBwbGljYWJsZSkgLSBBbHRob3VnaCBTU0kgaXMgdHlwaWNhbGx5IG5vdCB0YXhhYmxlLCBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIHBheW1lbnRzIGlzIHN0aWxsIHJlcXVpcmVkIGZvciBjb21wcmVoZW5zaXZlIGZpbmFuY2lhbCBhc3Nlc3NtZW50LjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHRoZSB0YXhhYmxlIHBvcnRpb24gb2YgeW91ciBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMsIGlmIGFueSwgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIEZhaWx1cmUgdG8gcHJvdmlkZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gbWF5IHJlc3VsdCBpbiBkZWxheXMgb3IgaW5hY2N1cmFjaWVzIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XHJcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGVzZSBtYXR0ZXJzLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHYW1ibGluZyBXaW5uaW5nc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiR2FtYmxpbmcgV2lubmluZ3NcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCBmcm9tIHlvdXIgcHJldmlvdXMgYW5zd2VycyB0aGF0IHlvdSBoYXZlIGV4cGVyaWVuY2VkIGdhbWJsaW5nIHdpbm5pbmdzIHRoaXMgdGF4IHllYXIgZnJvbSBsb3R0ZXJpZXMsIGNhc2lub3MsIGJldHRpbmcsIG9yIG90aGVyIGZvcm1zIG9mIGdhbWJsaW5nLiBUbyBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggZmlsaW5ncywgaXQncyBlc3NlbnRpYWwgdGhhdCB3ZSBjb2xsZWN0IHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB3aW5uaW5ncy48L3A+XHJcbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbjxvbD5cclxuICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBFYWNoIFdpbm5pbmc6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgVy0yRyBmb3Jtcywgc3RhdGVtZW50cyBmcm9tIGNhc2lub3MsIHJhY2V0cmFja3MsIG9yIG90aGVyIGdhbWJsaW5nIGVzdGFibGlzaG1lbnRzLCBhbmQgYW55IG90aGVyIG9mZmljaWFsIGRvY3VtZW50YXRpb24gdGhhdCByZXBvcnRzIHlvdXIgd2lubmluZ3MuPC9saT5cclxuICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBXaW5uaW5nczo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGVzIG9uIHdoaWNoIHlvdSBoYWQgZ2FtYmxpbmcgd2lubmluZ3MuPC9saT5cclxuICA8bGk+PHN0cm9uZz5UeXBlcyBvZiBHYW1ibGluZyBBY3Rpdml0aWVzOjwvc3Ryb25nPiBQbGVhc2Ugc3BlY2lmeSB3aGV0aGVyIHlvdXIgd2lubmluZ3Mgd2VyZSBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgc3BvcnRzIGJldHRpbmcsIGdhbWVzIG9mIGNoYW5jZSwgb3IgYW55IG90aGVyIGZvcm1zIG9mIGdhbWJsaW5nLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+QW1vdW50IG9mIFdpbm5pbmdzOjwvc3Ryb25nPiBUaGUgdG90YWwgYW1vdW50IHdvbiBmcm9tIGVhY2ggZ2FtYmxpbmcgYWN0aXZpdHkuIFBsZWFzZSBkaWZmZXJlbnRpYXRlIGJldHdlZW4gY2FzaCB3aW5uaW5ncyBhbmQgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGFueSBub24tY2FzaCBwcml6ZXMuPC9saT5cclxuICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBSZWxhdGVkIHRvIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxpc3QgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBnYW1ibGluZyBhY3Rpdml0aWVzLCBzdWNoIGFzIGJ1eS1pbnMgb3IgdHJhdmVsIGV4cGVuc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZXNlIGV4cGVuc2VzIG1heSB2YXJ5LjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+TG9zc2VzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNvcmRzIG9mIHlvdXIgbG9zc2VzLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9mIHRoZXNlIGxvc3NlcyBhcyB0aGV5IGNhbiBwb3RlbnRpYWxseSBvZmZzZXQgeW91ciB3aW5uaW5ncyBmb3IgdGF4IHB1cnBvc2VzLiBOb3RlLCBsb3NzZXMgY2FuIG9ubHkgYmUgY2xhaW1lZCB1cCB0byB0aGUgYW1vdW50IG9mIHRvdGFsIHdpbm5pbmdzLjwvbGk+XHJcbjwvb2w+XHJcbjxwPkl0J3MgaW1wb3J0YW50IHRvIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZ2FtYmxpbmcgd2lubmluZ3MgYW5kIGFueSByZWxhdGVkIGRlZHVjdGlvbnMgb3IgbG9zc2VzIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB5b3VyIHRheCBmaWxpbmcuPC9wPlxyXG48cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgb3IgaWYgeW91IG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuIFdlJ3JlIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNhbmNlbGxhdGlvbiBvZiBEZWJ0IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2FuY2VsbGF0aW9uIG9mIERlYnQgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPk91ciByZWNvcmRzIGluZGljYXRlIHlvdSd2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBoYXZpbmcgZGVidHMgZm9yZ2l2ZW4sIGNhbmNlbGVkLCBvciBkaXNjaGFyZ2VkIGZvciBsZXNzIHRoYW4gdGhlIGFtb3VudCB5b3Ugb3dlZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGV4cGxvcmUgYW55IGFwcGxpY2FibGUgdGF4IHJlbGllZiBvciBleGNsdXNpb25zLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyBmcm9tIHlvdS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cclxuPG9sPlxyXG48bGk+PHN0cm9uZz5Gb3JtIDEwOTktQzwvc3Ryb25nPjogQ29waWVzIG9mIGFueSBGb3JtIDEwOTktQyB5b3UgcmVjZWl2ZWQgcmVsYXRlZCB0byB0aGUgY2FuY2VsbGF0aW9uIG9mIGRlYnQuPC9saT5cclxuPGxpPjxzdHJvbmc+RGV0YWlsZWQgTGlzdCBvZiBEZWJ0czwvc3Ryb25nPjogSWYgeW91IGRpZG4ndCByZWNlaXZlIGEgRm9ybSAxMDk5LUMsIHBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgbGlzdCBvZiBhbnkgZGVidHMgdGhhdCB3ZXJlIGNhbmNlbGVkLCBpbmNsdWRpbmc6XHJcbiAgICA8dWw+XHJcbiAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGNyZWRpdG9yPC9saT5cclxuICAgIDxsaT5UaGUgb3JpZ2luYWwgYW1vdW50IG9mIHRoZSBkZWJ0PC9saT5cclxuICAgIDxsaT5UaGUgYW1vdW50IGNhbmNlbGVkPC9saT5cclxuICAgIDxsaT5UaGUgZGF0ZSBvZiBjYW5jZWxsYXRpb248L2xpPlxyXG4gICAgPC91bD5cclxuPC9saT5cclxuPGxpPjxzdHJvbmc+RXhwbGFuYXRpb24gb2YgQ2lyY3Vtc3RhbmNlczwvc3Ryb25nPjogQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiAoZS5nLiwgZmluYW5jaWFsIGhhcmRzaGlwLCByZXR1cm4gb2YgcHVyY2hhc2VkIGdvb2RzLCBldGMuKS48L2xpPlxyXG48bGk+PHN0cm9uZz5JbnNvbHZlbmN5IERvY3VtZW50YXRpb248L3N0cm9uZz46IElmIHlvdSB3ZXJlIGluc29sdmVudCAod2hlcmUgeW91ciB0b3RhbCBkZWJ0cyBleGNlZWRlZCB5b3VyIHRvdGFsIGFzc2V0cykgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjYW5jZWxsYXRpb24sIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB5b3VyIGZpbmFuY2lhbCBzdGF0dXMgYXQgdGhhdCB0aW1lLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZmluYW5jaWFsIGluZm9ybWF0aW9uIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC4gUGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XHJcbjxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB5b3UgZXZlcnkgc3RlcCBvZiB0aGUgd2F5LjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiUHJpbWFyeSBSZXNpZGVuY2UgRGVidCBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgYSBwb3J0aW9uIG9mIHlvdXIgbW9ydGdhZ2UgZm9yIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugd2FzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcyBpbiB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPkZvcm0gMTA5OS1DLCBDYW5jZWxsYXRpb24gb2YgRGVidDo8L2I+IFRoaXMgaXMgYSBjcnVjaWFsIGRvY3VtZW50IHRoYXQgbGVuZGVycyBtdXN0IHNlbmQgeW91IGlmIHRoZXkgY2FuY2VsZWQgb3IgZm9yZ2F2ZSBhIGRlYnQgZXhjZWVkaW5nICQ2MDAuPC9saT5cclxuICAgICAgICA8bGk+PGI+V3JpdHRlbiBjb21tdW5pY2F0aW9uIGZyb20geW91ciBsZW5kZXI6PC9iPiBBbnkgbGV0dGVycyBvciBvZmZpY2lhbCBkb2N1bWVudHMgZnJvbSB5b3VyIGxlbmRlciByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiB5b3VyIG1vcnRnYWdlIGRlYnQuPC9saT5cclxuICAgICAgICA8bGk+PGI+TW9ydGdhZ2Ugc3RhdGVtZW50czo8L2I+IFBsZWFzZSBwcm92aWRlIG1vcnRnYWdlIHN0YXRlbWVudHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVidCBjYW5jZWxsYXRpb24gdG8gc2hvdyB0aGUgY2hhbmdlIGluIHlvdXIgbW9ydGdhZ2UgYmFsYW5jZS48L2xpPlxyXG4gICAgICAgIDxsaT48Yj5Eb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIHByb3BlcnR5OjwvYj4gVGhpcyBpbmNsdWRlczpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPllvdXIgbW9ydGdhZ2UgY29udHJhY3QuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gZm9yZWNsb3N1cmUsIGlmIGFwcGxpY2FibGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGEgc2hvcnQgc2FsZSwgaWYgYXBwbGljYWJsZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlJlY29yZCBvZiBwYXltZW50cyBtYWRlOjwvYj4gSWYgeW91IG1hZGUgYW55IHBheW1lbnRzIHRvd2FyZHMgdGhlIG1vcnRnYWdlIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGVzZSBwYXltZW50cy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgYW5kIHByb3ZpZGUgdGhlbSB0byB1cy4gSWYgeW91IGhhdmUgYW55IGRpZmZpY3VsdHkgb2J0YWluaW5nIGFueSBvZiB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIG9yIGhhdmUgYW55IHF1ZXN0aW9ucywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIGluIGEgdGltZWx5IG1hbm5lciBpcyBjcnVjaWFsIGZvciB0aGUgYWNjdXJhdGUgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcclxuICAgIGFjdGlvblRpdGxlOiBcIlN0dWRlbnQgTG9hbiBEZWJ0IENhbmNlbGxhdGlvblwiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5JbiByZXNwb25zZSB0byB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2Ygc3R1ZGVudCBsb2FuIGRlYnQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IHByb2Nlc3MgeW91ciB0YXggcmV0dXJuLiBUaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG48b2w+XHJcbiAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgQ2FuY2VsbGF0aW9uIG9yIEZvcmdpdmVuZXNzIE5vdGljZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBsZXR0ZXIgb3Igbm90aWNlIGZyb20gdGhlIGxlbmRlciBvciBwcm9ncmFtIGFkbWluaXN0cmF0b3IgY29uZmlybWluZyB0aGUgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlIG9mIHlvdXIgc3R1ZGVudCBsb2FuIGRlYnQuPC9saT5cclxuICA8bGk+PHN0cm9uZz5TdHVkZW50IExvYW4gQWNjb3VudCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgc3RhdGVtZW50IGZyb20gYmVmb3JlIGFuZCBhZnRlciB0aGUgbG9hbiBmb3JnaXZlbmVzcywgY2FuY2VsbGF0aW9uLCBvciBkaXNjaGFyZ2Ugb2NjdXJyZWQsIHNob3dpbmcgdGhlIG91dHN0YW5kaW5nIGJhbGFuY2UgYW5kIHRoZSBiYWxhbmNlIGFmdGVyIHRoZSBhY3Rpb24gd2FzIHRha2VuLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBRdWFsaWZ5aW5nIFByb2dyYW0gUGFydGljaXBhdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkb2N1bWVudGF0aW9uIG9yIGNlcnRpZmljYXRlcyBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gcXVhbGlmeWluZyBwcm9ncmFtcyBzdWNoIGFzIFB1YmxpYyBTZXJ2aWNlIExvYW4gRm9yZ2l2ZW5lc3MgKFBTTEYpIG9yIFRlYWNoZXIgTG9hbiBGb3JnaXZlbmVzcywgYW1vbmcgb3RoZXJzLjwvbGk+XHJcbiAgPGxpPjxzdHJvbmc+SVJTIEZvcm0gMTA5OS1DIChpZiByZWNlaXZlZCk6PC9zdHJvbmc+IFRoaXMgZm9ybSBpcyBpc3N1ZWQgYnkgc29tZSBsZW5kZXJzIHdoZW4gYSBkZWJ0IGlzIGZvcmdpdmVuIG9yIGNhbmNlbGVkIGFuZCBpcyBjcnVjaWFsIGZvciB0YXggcmVwb3J0aW5nIHB1cnBvc2VzLiBJdCBpbmNsdWRlcyB0aGUgYW1vdW50IG9mIGZvcmdpdmVuIGRlYnQgdGhhdCBtYXkgYmUgY29uc2lkZXJlZCB0YXhhYmxlIGluY29tZS48L2xpPlxyXG4gIDxsaT48c3Ryb25nPkRldGFpbGVkIERlc2NyaXB0aW9uIG9mIENpcmN1bXN0YW5jZXM6PC9zdHJvbmc+IEEgd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb2FuJ3MgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlLCBpbmNsdWRpbmcgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB5b3VyIGVsaWdpYmlsaXR5IHVuZGVyIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG9yIGNvbmRpdGlvbi48L2xpPlxyXG48L29sPlxyXG48cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBwcm92aWRlZCBhcmUgY29tcGxldGUgYW5kIGxlZ2libGUuIFlvdSBjYW4gdXBsb2FkIHRoZSBkb2N1bWVudHMgc2VjdXJlbHkgdGhyb3VnaCBvdXIgY2xpZW50IHBvcnRhbC48L3A+XHJcbjxwPllvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvYmJ5IEluY29tZVwiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiSG9iYnkgSW5jb21lXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGAgICAgPHA+VGhhbmsgeW91IGZvciBwcm92aWRpbmcgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgaW5jb21lIHNvdXJjZXMgZm9yIHRoaXMgdGF4IHllYXIuIEFzIHBhcnQgb2Ygb3VyIHByZXBhcmF0aW9uIGZvciB5b3VyIHRheCByZXR1cm4sIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGVhcm5lZCBtb25leSBmcm9tIGhvYmJpZXMuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgdG8gdGhlIElSUyBhbmQgZW5zdXJlIHlvdSBjb21wbHkgd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIEhvYmJ5IEluY29tZTo8L3N0cm9uZz4gQSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBpbmNvbWUgcmVjZWl2ZWQgZnJvbSB5b3VyIGhvYmJ5IGFjdGl2aXRpZXMuIFBsZWFzZSBpbmNsdWRlIGRhdGVzLCBhbW91bnRzLCBhbmQgc291cmNlcy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjb3Jkczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvZiBhbnkgZXhwZW5zZXMgcmVsYXRlZCB0byB5b3VyIGhvYmJ5IGFjdGl2aXRpZXMuIFRoaXMgY2FuIGluY2x1ZGUgbWF0ZXJpYWxzLCBlcXVpcG1lbnQsIGFuZCBhbnkgb3RoZXIgY29zdHMgaW5jdXJyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgdGhhdCBzaG93IHRoZSB0cmFuc2FjdGlvbnMgcmVsYXRlZCB0byB5b3VyIGhvYmJ5IGluY29tZSBhbmQgZXhwZW5zZXMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBQcml6ZXM6PC9zdHJvbmc+IElmIHlvdXIgaG9iYnkgaW5jb21lIGluY2x1ZGVzIHByaXplcywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciByZWNlaXB0cyB0aGF0IGRldGFpbCB0aGVzZSBhd2FyZHMuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5PdGhlciBSZWxldmFudCBEb2N1bWVudHM6PC9zdHJvbmc+IEFueSBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhlIGluY29tZSBhbmQgZXhwZW5zZXMgcmVwb3J0ZWQgZm9yIHlvdXIgaG9iYnkgYWN0aXZpdGllcy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlBsZWFzZSBlbnN1cmUgeW91IHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gYXZvaWQgZGVsYXlzIGluIHRoZSB0YXggcmV0dXJuIHByb2Nlc3MuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDZXJ0YWluIENvdXJ0IEF3YXJkc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2VydGFpbiBDb3VydCBBd2FyZHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIGNvdXJ0IGF3YXJkcyBvciBzZXR0bGVtZW50cyBpbiB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGFtb3VudHMgYW5kIGNvbXBseSB3aXRoIHRheCBvYmxpZ2F0aW9ucywgd2UgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIGF3YXJkcyBvciBzZXR0bGVtZW50cy48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlR5cGUgb2YgQXdhcmQgb3IgU2V0dGxlbWVudDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgbmF0dXJlIChlLmcuLCBsb3N0IHdhZ2VzLCBwdW5pdGl2ZSBkYW1hZ2VzLCBldGMuKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudCBSZWNlaXZlZDo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBhd2FyZGVkIG9yIHNldHRsZWQsIGJlZm9yZSBhbnkgZGVkdWN0aW9ucy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHdoZW4geW91IHJlY2VpdmVkIHRoZSBjb21wZW5zYXRpb24uPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRzIG9yIGp1ZGdtZW50cyBwZXJ0YWluaW5nIHRvIHRoZSBhd2FyZCBvciBzZXR0bGVtZW50LiBUaGlzIGluY2x1ZGVzIGNvdXJ0IG9yZGVycywgYWdyZWVtZW50IGxldHRlcnMsIGFuZCByZWNlaXB0cy48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlRheCBXaXRoaGVsZDo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgdGhlIGFtb3VudCBvZiBmZWRlcmFsIG9yIHN0YXRlIHRheCBhbHJlYWR5IHdpdGhoZWxkIGZyb20gdGhlIHNldHRsZW1lbnQuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCdzIGltcGVyYXRpdmUgd2UgcmVjZWl2ZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgY291cnQgYXdhcmQgb3Igc2V0dGxlbWVudC4gRmFpbHVyZSB0byByZXBvcnQgc3VjaCBpbmNvbWUgYWNjdXJhdGVseSBjb3VsZCByZXN1bHQgaW4gcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPiBcclxuICAgIDxwPlBsZWFzZSBmb3J3YXJkIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgd2UgaGF2ZSBhbXBsZSB0aW1lIGZvciB5b3VyIHRheCBwcmVwYXJhdGlvbi4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cclxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBhbmQgYXJlIGhlcmUgdG8gaGVscCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlByaXplcyBhbmQgQXdhcmRzXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJQcml6ZXMgYW5kIEF3YXJkc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXHJcbiAgICA8cD5BcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydHMgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgd2UgaGF2ZSBpZGVudGlmaWVkIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgcHJpemVzIG9yIGF3YXJkcyBpbiB0aGUgZm9ybSBvZiBjYXNoLCBnb29kcywgb3Igc2VydmljZXMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgdG8gdGhlIElSUywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBmcm9tIHlvdS48L3A+XHJcbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxyXG4gICAgPG9sPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIEVhY2ggUHJpemUgb3IgQXdhcmQ6PC9zdHJvbmc+IEJyaWVmbHkgZGVzY3JpYmUgZWFjaCBwcml6ZSBvciBhd2FyZCByZWNlaXZlZCwgaW5jbHVkaW5nIHRoZSBuYXR1cmUgKGNhc2gsIGdvb2RzLCBzZXJ2aWNlcykgYW5kIGNvbnRleHQgKGNvbnRlc3QsIGFjaGlldmVtZW50IGF3YXJkLCBldGMuKS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPlZhbHVlIG9mIEVhY2ggUHJpemUgb3IgQXdhcmQ6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGVhY2ggcHJpemUgb3IgYXdhcmQgYXQgdGhlIHRpbWUgb2YgcmVjZWlwdC4gSWYgdGhlIHByaXplIHdhcyBpbiBjYXNoLCBzcGVjaWZ5IHRoZSBhbW91bnQuIElmIGluIGdvb2RzIG9yIHNlcnZpY2VzLCBwcm92aWRlIGFuIGVzdGltYXRlZCB2YWx1ZS48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUmVjZWlwdDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgZGF0ZSBvbiB3aGljaCBlYWNoIHByaXplIG9yIGF3YXJkIHdhcyByZWNlaXZlZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPklzc3VlciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiAoaWYgYXZhaWxhYmxlKSBvZiB0aGUgb3JnYW5pemF0aW9uIG9yIGVudGl0eSB0aGF0IGF3YXJkZWQgdGhlIHByaXplIG9yIHByb3ZpZGVkIHRoZSBhd2FyZC48L2xpPlxyXG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaGVsZCBUYXhlczo8L3N0cm9uZz4gSW5kaWNhdGUgaWYgYW55IHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSB0aGUgYXdhcmRlZCBhbW91bnQgYW5kIHByb3ZpZGUgdGhlIHdpdGhob2xkaW5nIGRvY3VtZW50KHMpLCBpZiBhdmFpbGFibGUuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCdzIGNydWNpYWwgZm9yIHRheCBwdXJwb3NlcyB0aGF0IHdlIHJlcG9ydCB0aGVzZSBhY2N1cmF0ZWx5IHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIElSUy48L3A+XHJcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBDb3ZlcmRlbGwgRGlzdHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBDb3ZlcmRlbGwgRGlzdHJpYnV0aW9uc1wiLFxyXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgYSB3aXRoZHJhd2FsIGZyb20gYSBDb3ZlcmRlbGwgRWR1Y2F0aW9uIFNhdmluZ3MgQWNjb3VudCAoRVNBKSBvciBhbiBFZHVjYXRpb24gSVJBIGZvciBlZHVjYXRpb25hbCBleHBlbnNlcyBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhlc2UgZGlzdHJpYnV0aW9ucyBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgd2l0aGRyYXduIGZyb20gdGhlIENvdmVyZGVsbCBFU0Egb3IgRWR1Y2F0aW9uIElSQS48L2xpPlxyXG4gICAgICAgIDxsaT5EZXRhaWxlZCBicmVha2Rvd24gb2YgaG93IHRoZXNlIGZ1bmRzIHdlcmUgdXRpbGl6ZWQsIHNwZWNpZmljYWxseTpcclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCB1c2VkIGZvciB0dWl0aW9uIGFuZCBmZWVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IHNwZW50IG9uIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+QW55IGFtb3VudHMgc3BlbnQgb24gcm9vbSBhbmQgYm9hcmQsIHNwZWNpZnlpbmcgaWYgdGhlIGJlbmVmaWNpYXJ5IHdhcyBlbnJvbGxlZCBhdCBsZWFzdCBoYWxmLXRpbWUuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCBxdWFsaWZpZWQgZWR1Y2F0aW9uIGV4cGVuc2VzIHBhaWQgdXNpbmcgdGhlc2UgZnVuZHMuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaT5Qcm9vZiBvZiB0aGUgYmVuZWZpY2lhcnkncyBlbnJvbGxtZW50IHN0YXR1cyAoZS5nLiwgdHVpdGlvbiBzdGF0ZW1lbnQsIGVucm9sbG1lbnQgdmVyaWZpY2F0aW9uKS48L2xpPlxyXG4gICAgICAgIDxsaT5UaGUgbmFtZSBhbmQgYWRkcmVzcyBvZiB0aGUgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24ocykgaW52b2x2ZWQuPC9saT5cclxuICAgICAgICA8bGk+QW55IEZvcm0gMTA5OS1RIHJlY2VpdmVkIHBlcnRhaW5pbmcgdG8gdGhlc2UgZGlzdHJpYnV0aW9ucy48L2xpPlxyXG4gICAgPC9vbD5cclxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGRldGFpbGVkIGluZm9ybWF0aW9uIHdpbGwgZW5zdXJlIHRoYXQgd2UgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMgcmVsYXRlZCB0byBlZHVjYXRpb24gZXhwZW5zZXMuIFBsZWFzZSBnYXRoZXIgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgYW5kIGxldCB1cyBrbm93IGlmIHlvdSByZXF1aXJlIGFzc2lzdGFuY2Ugb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUYXhhYmxlIFFUUCBEaXN0cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFFUUCBEaXN0cmlidXRpb25zXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXN0cmlidXRpb25zIGZyb20gYSBRdWFsaWZpZWQgVHVpdGlvbiBQcm9ncmFtIChRVFApLCBjb21tb25seSBrbm93biBhcyBhIDUyOSBwbGFuLCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gZW5zdXJlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHJlbGF0ZWQgdG8gdGhlc2UgZGlzdHJpYnV0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XHJcbjxvbD5cclxuICAgIDxsaT48c3Ryb25nPkFjY291bnQgSW5mb3JtYXRpb246PC9zdHJvbmc+IFRoZSBuYW1lIG9mIHRoZSBhY2NvdW50IGhvbGRlciBhbmQgdGhlIGJlbmVmaWNpYXJ5IGZvciBlYWNoIDUyOSBwbGFuIGRpc3RyaWJ1dGlvbi48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RGlzdHJpYnV0aW9uIFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbGwgMTA5OS1RIGZvcm1zIHJlY2VpdmVkIGZvciBlYWNoIGRpc3RyaWJ1dGlvbiB0aGlzIHRheCB5ZWFyLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgRGlzdHJpYnV0aW9uczo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBvZiBtb25leSBkaXN0cmlidXRlZCBmcm9tIHRoZSBRVFAgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+RWR1Y2F0aW9uYWwgRXhwZW5zZXMgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiB0aGUgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgZm9yIHdoaWNoIHRoZSBRVFAgZGlzdHJpYnV0aW9ucyB3ZXJlIHVzZWQuIFRoaXMgaW5jbHVkZXMgdHVpdGlvbiwgYm9va3MsIHN1cHBsaWVzLCBhbmQgYW55IGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlIGF0IGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uLjwvbGk+XHJcbiAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY2VpcHRzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBzdGF0ZW1lbnRzIHRoYXQgcHJvdmlkZSBwcm9vZiBvZiB0aGUgZWR1Y2F0aW9uYWwgZXhwZW5zZXMuPC9saT5cclxuICAgIDxsaT48c3Ryb25nPkluc3RpdHV0aW9uIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBOYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSB3aGVyZSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZC48L2xpPlxyXG4gICAgPGxpPjxzdHJvbmc+UmVjaXBpZW50J3MgSW5mb3JtYXRpb246PC9zdHJvbmc+IEZvciB3aG9tIHRoZSBleHBlbnNlcyB3ZXJlIGluY3VycmVkICh0aGUgYmVuZWZpY2lhcnkgb2YgdGhlIDUyOSBwbGFuKSBhbmQgdGhlaXIgU29jaWFsIFNlY3VyaXR5IE51bWJlci48L2xpPlxyXG48L29sPlxyXG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGRpc3RyaWJ1dGlvbnMgYW5kIGZvciBvcHRpbWl6aW5nIHlvdXIgdGF4IGJlbmVmaXRzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPlxyXG48cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0cmlrZSBCZW5lZml0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiU3RyaWtlIEJlbmVmaXRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGAgICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFzIHdlIHdvcmsgdG9nZXRoZXIgdG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IHlvdSByZWNlaXZlZCBzdHJpa2UgYmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhciBkdWUgdG8gcGFydGljaXBhdGlvbiBpbiBhIGxhYm9yIHN0cmlrZS4gVG8gZW5zdXJlIGNvbXBsaWFuY2UgYW5kIG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cclxuICAgIDxvbD5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgU3RyaWtlIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgc3VtIG9mIHN0cmlrZSBiZW5lZml0cyByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+U291cmNlIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gSW5kaWNhdGUgd2hldGhlciB0aGVzZSBiZW5lZml0cyB3ZXJlIHBhaWQgYnkgeW91ciB1bmlvbiwgYW4gaW5zdXJhbmNlIHBvbGljeSwgb3IgYW5vdGhlciBzb3VyY2UuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZm9ybXMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBzaG93IHRoZSByZWNlaXB0IG9mIHRoZXNlIGJlbmVmaXRzLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgU3RyaWtlIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IExpc3QgdGhlIGRhdGVzIG9yIGR1cmF0aW9uIG9mIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgbGFib3Igc3RyaWtlLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBDb3N0cyBvciBFeHBlbnNlczo8L3N0cm9uZz4gSWYgeW91IGluY3VycmVkIGFueSBjb3N0cyBvciBleHBlbnNlcyByZWxhdGVkIHRvIHBhcnRpY2lwYXRpbmcgaW4gdGhlIHN0cmlrZSAoZS5nLiwgdHJhdmVsIHRvIHBpY2tldCBsaW5lcywgc2lnbmFnZSBtYXRlcmlhbHMpLCBwbGVhc2UgZGV0YWlsIHRoZXNlLjwvbGk+XHJcbiAgICA8L29sPlxyXG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZW5zdXJpbmcgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBtYXkgaW1wYWN0IHlvdXIgdGF4YWJsZSBpbmNvbWUuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxyXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkp1cnkgRHV0eSBQYXlcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkp1cnkgRHV0eSBQYXlcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSByZWFjaGluZyB0aGUgY3JpdGljYWwgc3RhZ2VzIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGp1cnkgZHV0eSBwYXkgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmNvbWUgYW5kIGV4cGxvcmUgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIG9yIGNyZWRpdHMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIEp1cnkgRHV0eSBQYXk6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciBzZXJ2aW5nIGp1cnkgZHV0eS4gVGhpcyBhbW91bnQgaXMgb2Z0ZW4gcmVwb3J0ZWQgb24gRm9ybSAxMDk5LUcuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5KdXJ5IER1dHkgRGF0ZXM6PC9zdHJvbmc+IFRoZSBkYXRlcyB5b3Ugc2VydmVkIG9uIGp1cnkgZHV0eS4gVGhpcyBoZWxwcyBpbiB2ZXJpZnlpbmcgdGhlIGR1cmF0aW9uIGFuZCBjb3JyZWxhdGluZyBpdCB3aXRoIHRoZSBjb21wZW5zYXRpb24gcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBJZiB5b3VyIGVtcGxveWVyIGNvbXBlbnNhdGVkIHlvdSAoaW4gZnVsbCBvciBwYXJ0KSBmb3IgdGhlIHRpbWUgeW91IHdlcmUgc2VydmluZyBvbiBqdXJ5IGR1dHksIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3VyIGVtcGxveWVyLjwvbGk+XHJcbiAgICAgICAgPGxpPjxzdHJvbmc+QmFuayBTdGF0ZW1lbnRzIG9yIFBheSBTdHViczo8L3N0cm9uZz4gQW55IGJhbmsgc3RhdGVtZW50cyBvciBwYXkgc3R1YnMgc2hvd2luZyB0aGUganVyeSBkdXR5IHBheSBkZXBvc2l0IG9yIGVtcGxveWVyIHJlaW1idXJzZW1lbnRzLiBUaGVzZSBkb2N1bWVudHMgaGVscCBpbiB2ZXJpZnlpbmcgdGhlIGFtb3VudHMgZGVjbGFyZWQuPC9saT5cclxuICAgICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRyAoaWYgcmVjZWl2ZWQpOjwvc3Ryb25nPiBTb21lIGp1cmlzZGljdGlvbnMgcHJvdmlkZSBhIEZvcm0gMTA5OS1HIGZvciBqdXJ5IGR1dHkgcGF5LiBJZiB5b3UgcmVjZWl2ZWQgb25lLCBwbGVhc2UgaW5jbHVkZSBhIGNvcHkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Qcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHdpbGwgYWxsb3cgdXMgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcclxuICB9LFxyXG4gIHtcclxuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQWxhc2thIFBlcm1hbmVudCBGdW5kcyBEaXZpZGVuZHNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXHJcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcclxuICAgIDxwPkluIHJldmlld2luZyB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgZm9yIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbiwgd2Ugbm90ZWQgdGhhdCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluZm9ybWF0aW9uIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIGd1aWRlbGluZXMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPjxiPjEwOTktTUlTQyBGb3JtOjwvYj4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSAxMDk5LU1JU0MgZm9ybSBpc3N1ZWQgYnkgdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBDb3Jwb3JhdGlvbi4gVGhpcyBmb3JtIG91dGxpbmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGl2aWRlbmRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cclxuICAgICAgICA8bGk+PGI+QmFuayBTdGF0ZW1lbnRzOjwvYj4gSWYgcG9zc2libGUsIHByb3ZpZGUgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIGRlcG9zaXQocykgb2YgdGhlIGRpdmlkZW5kcyBpbnRvIHlvdXIgYWNjb3VudC4gVGhpcyBzZXJ2ZXMgYXMgYWRkaXRpb25hbCBwcm9vZiBvZiBpbmNvbWUuPC9saT5cclxuICAgICAgICA8bGk+PGI+UGVyc29uYWwgSWRlbnRpZmljYXRpb24gSW5mb3JtYXRpb246PC9iPiBDb25maXJtIHlvdXIgZnVsbCBsZWdhbCBuYW1lIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gZGlzY3JlcGFuY2llcyBiZXR3ZWVuIG91ciByZWNvcmRzIGFuZCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgb24gdGhlIDEwOTktTUlTQyBmb3JtLjwvbGk+XHJcbiAgICAgICAgPGxpPjxiPlByZXZpb3VzIFllYXIncyBEaXZpZGVuZCBJbmZvcm1hdGlvbjo8L2I+IElmIHlvdSByZWNlaXZlZCBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciBidXQgaGF2ZSBub3QgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIHNvLiBJdCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBjYXJyeW92ZXIgZWZmZWN0cyBvbiB5b3VyIGN1cnJlbnQgdGF4IHllYXIuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLiBDb21wbGV0aW5nIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB3aWxsIGVuYWJsZSB1cyB0byBwcm9ncmVzcyB3aXRoIHRoZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4gZWZmaWNpZW50bHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXHJcbiAgfSxcclxuICB7XHJcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkV4ZWN1dG9yIEZlZXNcIixcclxuICAgIGFjdGlvblRpdGxlOiBcIkV4ZWN1dG9yIEZlZXNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxyXG4gICAgPHA+V2UgdW5kZXJzdGFuZCBmcm9tIHlvdXIgcmVjZW50IHJlc3BvbnNlIHRoYXQgeW91IGhhdmUgcGFpZCBvciByZWNlaXZlZCBleGVjdXRvciBmZWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRheCBwcmVwYXJhdGlvbiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZXNlIHRyYW5zYWN0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XHJcbjxvbD5cclxuICA8bGk+QSBkZXRhaWxlZCBzdGF0ZW1lbnQgb2YgdGhlIGV4ZWN1dG9yIGZlZXMgcGFpZCBvciByZWNlaXZlZCwgaW5jbHVkaW5nIGRhdGVzIGFuZCBhbW91bnRzLjwvbGk+XHJcbiAgPGxpPklmIHlvdSByZWNlaXZlZCBleGVjdXRvciBmZWVzLCBwbGVhc2UgcHJvdmlkZSB5b3VyIHJvbGUgKGUuZy4sIHByaW1hcnkgZXhlY3V0b3IsIGNvLWV4ZWN1dG9yKSBhbmQgdGhlIGVzdGF0ZSdzIG5hbWUuPC9saT5cclxuICA8bGk+SWYgeW91IHBhaWQgZXhlY3V0b3IgZmVlcywgcHJvdmlkZSB0aGUgbmFtZSBhbmQgdGF4IGlkZW50aWZpY2F0aW9uIG51bWJlciAoU1NOIG9yIEVJTikgb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhlIGZlZXMgd2VyZSBwYWlkLjwvbGk+XHJcbiAgPGxpPkFueSBkb2N1bWVudGF0aW9uIHRoYXQgb3V0bGluZXMgdGhlIGFncmVlbWVudCBvciBjb3VydCBvcmRlciByZWdhcmRpbmcgdGhlIGV4ZWN1dG9yIGZlZS48L2xpPlxyXG4gIDxsaT5Db3BpZXMgb2YgYmFuayBzdGF0ZW1lbnRzIG9yIGNhbmNlbGxlZCBjaGVja3MgZXZpZGVuY2luZyB0aGUgcGF5bWVudCBvciByZWNlaXB0IG9mIHRoZXNlIGZlZXMuPC9saT5cclxuICA8bGk+Rm9yIGZlZXMgcmVjZWl2ZWQsIHBsZWFzZSBjb25maXJtIHdoZXRoZXIgdGF4ZXMgd2VyZSB3aXRoaGVsZCBvciBub3QuIElmIHNvLCBwcm92aWRlIGEgY29weSBvZiB0aGUgRm9ybSAxMDk5LU1JU0MgeW91IHJlY2VpdmVkLjwvbGk+XHJcbjwvb2w+XHJcbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZXhlY3V0b3IgZmVlcyBhbmQgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyBndWlkZWxpbmVzLiBQbGVhc2Ugc2VuZCB0aGUgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiB0byB1cyB0byBmYWNpbGl0YXRlIGEgdGltZWx5IGFuZCBhY2N1cmF0ZSB0YXggZmlsaW5nLjwvcD5cclxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxyXG4gIH0sXHJcbiAge1xyXG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFdmVudCBHcmF0dWl0aWVzIGFuZCBHaWZ0c1wiLFxyXG4gICAgYWN0aW9uVGl0bGU6IFwiRXZlbnQgR3JhdHVpdGllcyBhbmQgR2lmdHNcIixcclxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXJ0aWVzIG9yIGV2ZW50cyB5b3UgaG9zdGVkIHRoaXMgdGF4IHllYXIuIFNwZWNpZmljYWxseSwgc2luY2UgeW91IGluZGljYXRlZCB0aGF0IHlvdSByZWNlaXZlZCBnaWZ0cywgZ3JhdHVpdGllcywgb3Igb3RoZXIgZm9ybXMgb2YgY29tcGVuc2F0aW9uIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGV2ZW50cywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cclxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XHJcbiAgICA8b2w+XHJcbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiBlYWNoIGV2ZW50IGhvc3RlZCwgaW5jbHVkaW5nOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGF0ZSBvZiB0aGUgZXZlbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Mb2NhdGlvbiBvZiB0aGUgZXZlbnQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BcHByb3hpbWF0ZSBudW1iZXIgb2YgYXR0ZW5kZWVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+UHVycG9zZSBvZiB0aGUgZXZlbnQgKGUuZy4sIHNhbGVzIHByb21vdGlvbiwgY3VzdG9tZXIgYXBwcmVjaWF0aW9uKS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gZm9yIGVhY2ggZ2lmdCwgZ3JhdHVpdHksIG9yIGZvcm0gb2YgY29tcGVuc2F0aW9uIHJlY2VpdmVkLCBzdWNoIGFzOlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5Fc3RpbWF0ZWQgZmFpciBtYXJrZXQgdmFsdWUgYXQgdGhlIHRpbWUgcmVjZWl2ZWQuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBwcm92aWRpbmcgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIHJlZ2FyZGluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBpdGVtcyAoZS5nLiwgdGhhbmsgeW91IGxldHRlcnMsIGVtYWlscyBjb25maXJtaW5nIHJlY2VpcHQpLjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSBob3N0aW5nIHRoZXNlIGV2ZW50cyAoZS5nLiwgY2F0ZXJpbmcsIHZlbnVlIHJlbnRhbCwgZW50ZXJ0YWlubWVudCkuPC9saT5cclxuICAgIDwvb2w+XHJcbiAgICA8cD5JdCBpcyBjcnVjaWFsIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgYWxsIGZvcm1zIG9mIGluY29tZSwgaW5jbHVkaW5nIG5vbi1tb25ldGFyeSBjb21wZW5zYXRpb24sIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucy4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2l0aCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gdGhpcyBwcm9jZXNzLjwvcD5cclxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcclxuICB9LFxyXG5dO1xyXG4iXX0=