@adonoustech/bacon-tax 3.2.0 → 3.3.1
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.
- package/dist/cjs/action-tems/action-tax-fragments.js +2297 -0
- package/dist/cjs/action-tems/action-tax-reminder-types.js +10 -0
- package/dist/cjs/action-tems/action-tax-subjects.js +135 -0
- package/dist/cjs/action-tems/i-action-tax-correspondence.js +3 -0
- package/dist/cjs/action-tems/i-action-tax-upload.js +3 -0
- package/dist/cjs/action-tems/i-tax-action.js +3 -0
- package/dist/cjs/action-tems/index.js +10 -0
- package/dist/cjs/email/index.js +5 -0
- package/dist/cjs/email/tax-email-templates.js +13 -0
- package/dist/cjs/form-models/i-address-model.js +3 -0
- package/dist/cjs/form-models/i-adjustments-income-model.js +3 -0
- package/dist/cjs/form-models/i-business-travel-personal-funds-model.js +3 -0
- package/dist/cjs/form-models/i-business-use-vehicle-model.js +3 -0
- package/dist/cjs/form-models/i-canonical-residency.model.js +3 -0
- package/dist/cjs/form-models/i-capital-gains-loss-model.js +3 -0
- package/dist/cjs/form-models/i-clergy-taxation-model.js +3 -0
- package/dist/cjs/form-models/i-dependents-form-model.js +3 -0
- package/dist/cjs/form-models/i-employee-compensation-model.js +3 -0
- package/dist/cjs/form-models/i-foreign-financial-reporting-model.js +3 -0
- package/dist/cjs/form-models/i-fringe-benefits-model.js +3 -0
- package/dist/cjs/form-models/i-hybrid-business-use-home-model.js +3 -0
- package/dist/cjs/form-models/i-individual-additional-taxes-model.js +3 -0
- package/dist/cjs/form-models/i-individual-retirement-accounts-model.js +3 -0
- package/dist/cjs/form-models/i-individual-tax-credits-model.js +3 -0
- package/dist/cjs/form-models/i-insurance-payments-model.js +3 -0
- package/dist/cjs/form-models/i-intake-extended-data.js +3 -0
- package/dist/cjs/form-models/i-investment-income-model.js +3 -0
- package/dist/cjs/form-models/i-itemized-deductions-model.js +3 -0
- package/dist/cjs/form-models/i-last-day-year-marital-status-model.js +3 -0
- package/dist/cjs/form-models/i-multiple-business-se-tax-model.js +3 -0
- package/dist/cjs/form-models/i-non-recognition-transfers-model.js +3 -0
- package/dist/cjs/form-models/i-other-taxable-income-form-model.js +3 -0
- package/dist/cjs/form-models/i-premium-tax-credit-model.js +3 -0
- package/dist/cjs/form-models/i-rental-royalty-income-model.js +3 -0
- package/dist/cjs/form-models/i-statutory-extensions-model.js +3 -0
- package/dist/cjs/form-models/i-tax-general-model.js +3 -0
- package/dist/cjs/form-models/i-taxable-self-employment-income-model.js +3 -0
- package/dist/cjs/form-models/i-taxpayer-bio-model.js +3 -0
- package/dist/cjs/form-models/i-veteran-benefits-model.js +3 -0
- package/dist/cjs/form-models/index.js +35 -0
- package/dist/cjs/form-models/last-day-year-marital-statuses.js +14 -0
- package/dist/cjs/index.js +16 -0
- package/dist/cjs/other-models/bacon-tax-service-statuses.js +10 -0
- package/dist/cjs/other-models/business-entity-types.js +15 -0
- package/dist/cjs/other-models/i-bacon-tax-client-business.js +3 -0
- package/dist/cjs/other-models/i-bacon-tax-client.js +3 -0
- package/dist/cjs/other-models/i-bacon-tax-service.js +3 -0
- package/dist/cjs/other-models/index.js +11 -0
- package/dist/cjs/other-models/tax-system-process-status.js +3 -0
- package/dist/cjs/other-models/tax-system-return-complexity.js +3 -0
- package/dist/cjs/tax-years/index.js +5 -0
- package/dist/cjs/tax-years/tax-years.js +5 -0
- package/dist/es/action-tems/action-tax-fragments.js +638 -0
- package/dist/es/action-tems/action-tax-reminder-types.js +7 -0
- package/dist/es/action-tems/action-tax-subjects.js +132 -0
- package/dist/es/action-tems/i-action-tax-correspondence.js +2 -0
- package/dist/es/action-tems/i-action-tax-upload.js +2 -0
- package/dist/es/action-tems/i-tax-action.js +2 -0
- package/dist/es/action-tems/index.js +7 -0
- package/dist/es/email/index.js +2 -0
- package/dist/es/email/tax-email-templates.js +10 -0
- package/dist/es/form-models/i-address-model.js +2 -0
- package/dist/es/form-models/i-adjustments-income-model.js +2 -0
- package/dist/es/form-models/i-business-travel-personal-funds-model.js +2 -0
- package/dist/es/form-models/i-business-use-vehicle-model.js +2 -0
- package/dist/es/form-models/i-canonical-residency.model.js +2 -0
- package/dist/es/form-models/i-capital-gains-loss-model.js +2 -0
- package/dist/es/form-models/i-clergy-taxation-model.js +2 -0
- package/dist/es/form-models/i-dependents-form-model.js +2 -0
- package/dist/es/form-models/i-employee-compensation-model.js +2 -0
- package/dist/es/form-models/i-foreign-financial-reporting-model.js +2 -0
- package/dist/es/form-models/i-fringe-benefits-model.js +2 -0
- package/dist/es/form-models/i-hybrid-business-use-home-model.js +2 -0
- package/dist/es/form-models/i-individual-additional-taxes-model.js +2 -0
- package/dist/es/form-models/i-individual-retirement-accounts-model.js +2 -0
- package/dist/es/form-models/i-individual-tax-credits-model.js +2 -0
- package/dist/es/form-models/i-insurance-payments-model.js +2 -0
- package/dist/es/form-models/i-intake-extended-data.js +2 -0
- package/dist/es/form-models/i-investment-income-model.js +2 -0
- package/dist/es/form-models/i-itemized-deductions-model.js +2 -0
- package/dist/es/form-models/i-last-day-year-marital-status-model.js +2 -0
- package/dist/es/form-models/i-multiple-business-se-tax-model.js +2 -0
- package/dist/es/form-models/i-non-recognition-transfers-model.js +2 -0
- package/dist/es/form-models/i-other-taxable-income-form-model.js +2 -0
- package/dist/es/form-models/i-premium-tax-credit-model.js +2 -0
- package/dist/es/form-models/i-rental-royalty-income-model.js +2 -0
- package/dist/es/form-models/i-statutory-extensions-model.js +2 -0
- package/dist/es/form-models/i-tax-general-model.js +2 -0
- package/dist/es/form-models/i-taxable-self-employment-income-model.js +2 -0
- package/dist/es/form-models/i-taxpayer-bio-model.js +2 -0
- package/dist/es/form-models/i-veteran-benefits-model.js +2 -0
- package/dist/es/form-models/index.js +32 -0
- package/dist/es/form-models/last-day-year-marital-statuses.js +11 -0
- package/dist/es/index.js +13 -0
- package/dist/es/other-models/bacon-tax-service-statuses.js +7 -0
- package/dist/es/other-models/business-entity-types.js +12 -0
- package/dist/es/other-models/i-bacon-tax-client-business.js +2 -0
- package/dist/es/other-models/i-bacon-tax-client.js +2 -0
- package/dist/es/other-models/i-bacon-tax-service.js +2 -0
- package/dist/es/other-models/index.js +8 -0
- package/dist/es/other-models/tax-system-process-status.js +2 -0
- package/dist/es/other-models/tax-system-return-complexity.js +2 -0
- package/dist/es/tax-years/index.js +2 -0
- package/dist/es/tax-years/tax-years.js +2 -0
- package/dist/types/action-tems/action-tax-fragments.d.ts +5 -0
- package/dist/types/action-tems/action-tax-reminder-types.d.ts +5 -0
- package/dist/types/action-tems/action-tax-subjects.d.ts +130 -0
- package/dist/types/action-tems/i-action-tax-correspondence.d.ts +10 -0
- package/dist/types/action-tems/i-action-tax-upload.d.ts +7 -0
- package/dist/types/action-tems/i-tax-action.d.ts +23 -0
- package/dist/types/action-tems/index.d.ts +6 -0
- package/dist/types/email/index.d.ts +1 -0
- package/dist/types/email/tax-email-templates.d.ts +8 -0
- package/dist/types/form-models/i-address-model.d.ts +7 -0
- package/dist/types/form-models/i-adjustments-income-model.d.ts +19 -0
- package/dist/types/form-models/i-business-travel-personal-funds-model.d.ts +3 -0
- package/dist/types/form-models/i-business-use-vehicle-model.d.ts +3 -0
- package/dist/types/form-models/i-canonical-residency.model.d.ts +4 -0
- package/dist/types/form-models/i-capital-gains-loss-model.d.ts +34 -0
- package/dist/types/form-models/i-clergy-taxation-model.d.ts +5 -0
- package/dist/types/form-models/i-dependents-form-model.d.ts +3 -0
- package/dist/types/form-models/i-employee-compensation-model.d.ts +15 -0
- package/dist/types/form-models/i-foreign-financial-reporting-model.d.ts +4 -0
- package/dist/types/form-models/i-fringe-benefits-model.d.ts +27 -0
- package/dist/types/form-models/i-hybrid-business-use-home-model.d.ts +5 -0
- package/dist/types/form-models/i-individual-additional-taxes-model.d.ts +7 -0
- package/dist/types/form-models/i-individual-retirement-accounts-model.d.ts +5 -0
- package/dist/types/form-models/i-individual-tax-credits-model.d.ts +12 -0
- package/dist/types/form-models/i-insurance-payments-model.d.ts +10 -0
- package/dist/types/form-models/i-intake-extended-data.d.ts +37 -0
- package/dist/types/form-models/i-investment-income-model.d.ts +24 -0
- package/dist/types/form-models/i-itemized-deductions-model.d.ts +9 -0
- package/dist/types/form-models/i-last-day-year-marital-status-model.d.ts +8 -0
- package/dist/types/form-models/i-multiple-business-se-tax-model.d.ts +3 -0
- package/dist/types/form-models/i-non-recognition-transfers-model.d.ts +5 -0
- package/dist/types/form-models/i-other-taxable-income-form-model.d.ts +20 -0
- package/dist/types/form-models/i-premium-tax-credit-model.d.ts +5 -0
- package/dist/types/form-models/i-rental-royalty-income-model.d.ts +19 -0
- package/dist/types/form-models/i-statutory-extensions-model.d.ts +5 -0
- package/dist/types/form-models/i-tax-general-model.d.ts +3 -0
- package/dist/types/form-models/i-taxable-self-employment-income-model.d.ts +10 -0
- package/dist/types/form-models/i-taxpayer-bio-model.d.ts +12 -0
- package/dist/types/form-models/i-veteran-benefits-model.d.ts +12 -0
- package/dist/types/form-models/index.d.ts +31 -0
- package/dist/types/form-models/last-day-year-marital-statuses.d.ts +9 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/other-models/bacon-tax-service-statuses.d.ts +5 -0
- package/dist/types/other-models/business-entity-types.d.ts +10 -0
- package/dist/types/other-models/i-bacon-tax-client-business.d.ts +12 -0
- package/dist/types/other-models/i-bacon-tax-client.d.ts +4 -0
- package/dist/types/other-models/i-bacon-tax-service.d.ts +9 -0
- package/dist/types/other-models/index.d.ts +7 -0
- package/dist/types/other-models/tax-system-process-status.d.ts +15 -0
- package/dist/types/other-models/tax-system-return-complexity.d.ts +6 -0
- package/dist/types/tax-years/index.d.ts +1 -0
- package/dist/types/tax-years/tax-years.d.ts +1 -0
- package/package.json +2 -2
- package/src/form-models/i-capital-gains-loss-model.ts +33 -1
- package/.nx/workspace-data/file-map.json +0 -260
- package/.nx/workspace-data/lockfile-dependencies.hash +0 -1
- package/.nx/workspace-data/lockfile-nodes.hash +0 -1
- package/.nx/workspace-data/nx_files.nxt +0 -0
- package/.nx/workspace-data/parsed-lock-file.dependencies.json +0 -4602
- package/.nx/workspace-data/parsed-lock-file.nodes.json +0 -4566
- package/.nx/workspace-data/project-graph.json +0 -9064
- package/.nx/workspace-data/project-graph.lock +0 -0
- package/.nx/workspace-data/source-maps.json +0 -1
|
@@ -0,0 +1,638 @@
|
|
|
1
|
+
export var ActionTaxFragments = [
|
|
2
|
+
{
|
|
3
|
+
actionTaxSubject: "Prior Year Tax Returns",
|
|
4
|
+
actionTitle: "Provide Prior Year Tax Returns",
|
|
5
|
+
actionInstructions: "<p>We are in the process of preparing your tax returns and require your assistance to ensure accuracy and completeness. One critical piece of information we need is your <strong>Prior Year Tax Returns</strong>. This document is essential for several reasons, including but not limited to: verifying carry-forward amounts, comparing year-over-year income and deductions, and ensuring compliance with tax laws.</p>\n <p>To facilitate your tax preparation, please provide the following:</p>\n <ol>\n <li>A copy of your <strong>Federal tax return</strong> for the last tax year.</li>\n <li>A copy of your <strong>State tax return</strong> for the last tax year, if applicable.</li>\n <li>Any <strong>notices or amendments</strong> related to your prior year tax returns.</li>\n </ol>\n <p>If you have any difficulty in gathering these documents, please let us know as soon as possible so we can discuss alternative solutions.</p>\n <p>We appreciate your prompt attention to this request. Providing these will enable us to complete your tax preparation without delay.</p>",
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
actionTaxSubject: "Statutory Extensions",
|
|
9
|
+
actionTitle: "Determining Eligibility for Statutory Filing Extensions",
|
|
10
|
+
actionInstructions: "<p>To ensure that we can accurately determine if you qualify for statutory filing extensions for your tax returns, we require specific information from you. Please see below the categories of information needed based on different eligibility criteria:</p>\n <ol>\n <li><strong>Federal Disaster Areas</strong>\n <ul>\n <li>Confirmation of your primary residence location during the tax year.</li>\n <li>Any official documentation or correspondence received regarding disaster declarations in your area.</li>\n </ul>\n </li>\n <li><strong>Living Abroad</strong>\n <ul>\n <li>Proof of residence outside the United States for more than 330 full days within a 12-month period.</li>\n <li>Documentation supporting your physical presence or bona fide residence in a foreign country.</li>\n </ul>\n </li>\n <li><strong>Active Military</strong>\n <ul>\n <li>Documentation indicating active duty status, including dates of service within the tax year.</li>\n <li>If applicable, orders for overseas deployment.</li>\n </ul>\n </li>\n <li><strong>Combat Zone</strong>\n <ul>\n <li>Official orders demonstrating your deployment to a combat zone, including the specific dates.</li>\n <li>Any relevant communication from the Department of Defense or other official bodies regarding your service in a combat zone.</li>\n </ul>\n </li>\n </ol>\n <p>Please ensure that you provide this information at your earliest convenience to facilitate the accurate and timely preparation of your tax returns. If you have any questions or need further clarification, do not hesitate to contact us.</p>",
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
actionTaxSubject: "Dependents",
|
|
14
|
+
actionTitle: "Request for Dependent Information",
|
|
15
|
+
actionInstructions: "<p>We are in the process of preparing your tax documents and need additional information regarding your dependents. This information is crucial for applying the most beneficial dependency tests, including qualifications for Head of Household (HOH), Child Tax Credit, and other related benefits. Please provide the following details for each of your claimed dependents:</p>\n <ol>\n <li><strong>Full Name:</strong> The complete legal name of the dependent.</li>\n <li><strong>Social Security Number (SSN) or Taxpayer Identification Number (TIN):</strong> This is necessary for identification purposes.</li>\n <li><strong>Date of Birth:</strong> Helps to determine eligibility for certain credits like the Child Tax Credit.</li>\n <li><strong>Relationship to You:</strong> Specify the dependent's relationship (son, daughter, stepchild, foster child, brother, sister, etc.) to you.</li>\n <li><strong>Residency:</strong> Confirm the dependent lived with you for more than half the year.</li>\n <li><strong>Financial Support:</strong> Confirm you provided more than half of the dependent\u2019s financial support for the year.</li>\n <li><strong>Citizenship:</strong> Confirm the dependent is a U.S. citizen, U.S. national, or a resident alien.</li>\n <li><strong>Marital Status:</strong> Indicate whether the dependent is married and, if so, whether they are filing jointly.</li>\n <li><strong>Income Information:</strong> If applicable, provide details regarding any income the dependent may have earned or received.</li>\n </ol>\n <p>Please ensure you provide complete and accurate information to avoid any delays in the processing of your tax return.</p>\n <p>Thank you for your prompt attention to this matter. If you have any questions or require further assistance, please do not hesitate to contact us.</p>",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
actionTaxSubject: "Head of Household",
|
|
19
|
+
actionTitle: "Head of Household Filing",
|
|
20
|
+
actionInstructions: "<p>To ensure accurate and compliant tax filing under the \"Head of Household\" status, we kindly request the following information. This status can provide significant tax benefits, and it is crucial that all IRS requirements are met. Please provide:</p>\n <ol>\n <li><strong>Marital Status:</strong> Confirmation of your marital status as of the last day of the tax year (e.g., single, divorced, legally separated).</li>\n <li><strong>Household Expenses:</strong> Detailed records indicating that you paid more than half of the costs of keeping up a home for the tax year. This includes rent, mortgage interest, property taxes, utilities, repairs, maintenance, and groceries.</li>\n <li><strong>Qualifying Person:</strong> Information on the qualifying person(s) who lived with you in the home for more than half of the year, except for temporary absences such as school. Please include:\n <ul>\n <li>Full name and relationship to you (e.g., child, parent, sibling).</li>\n <li>Duration of residency at your home during the tax year.</li>\n <li>Supporting documents (birth certificates, school records, etc.) proving the residency and relationship.</li>\n </ul>\n </li>\n <li><strong>Additional Support:</strong> Any further documentation that can support your claim for the Head of Household filing status.</li>\n </ol>\n <p>Please note that providing accurate and complete information is essential for your benefit and to comply with tax laws. Should you have any questions or require assistance in gathering these details, do not hesitate to contact us.</p>",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
actionTaxSubject: "Residency Status",
|
|
24
|
+
actionTitle: "Information on Residency Status",
|
|
25
|
+
actionInstructions: "<p>We understand that either you or your spouse is not a U.S. citizen. To accurately determine your tax status, we need to apply the necessary Tax Residency Tests, which include the <strong>Green Card Test</strong> and the <strong>Substantial Presence Test</strong>. This will help us ensure your tax returns are completed correctly and comply with U.S. regulations.</p>\n\n <p>To proceed, we kindly ask you to provide the following information:</p>\n <ol>\n <li><strong>Green Card Status:</strong> Please confirm if you or your spouse have been issued a U.S. green card (Lawful Permanent Resident Card) at any point during the tax year. If yes, provide a copy of the green card or the official document confirming the status.</li>\n <li><strong>Date of Arrival in the U.S.:</strong> The exact dates when you and/or your spouse first arrived in the U.S. during the tax year.</li>\n <li><strong>Travel History:</strong> A detailed list of all the dates you and/or your spouse entered and left the U.S. during the tax year. This information is crucial for the Substantial Presence Test.</li>\n <li><strong>Visa Type:</strong> If you or your spouse are on a visa, please specify the type and provide a copy of the visa.</li>\n <li><strong>Previous Year Tax Filings:</strong> Copies of last year's tax returns, if applicable. This information can provide context and help determine residency status more accurately.</li>\n </ol>\n\n <p>Please ensure all documents are clear and legible. You can send them to us via email or through our secure client portal. For any questions or assistance, feel free to contact us directly.</p>\n\n <p>We appreciate your prompt attention to this matter and look forward to assisting you with your tax preparation.</p>",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
actionTaxSubject: "Joint Tax Relief",
|
|
29
|
+
actionTitle: "Joint Tax Relief Details",
|
|
30
|
+
actionInstructions: "<p>To assist you effectively with your request for joint tax relief, we need to collect specific information to understand your situation thoroughly. This will help us determine the most suitable type of relief for your circumstances, which may include Innocent Spouse Relief, Injured Spouse Allocation, Separation of Liability Relief, or Equitable Relief. Please provide the following documents and information at your earliest convenience:</p>\n <ol>\n <li><strong>Complete Tax Returns:</strong> Copies of all tax returns for the years you are requesting relief.</li>\n <li><strong>Detailed Statement:</strong> A written statement explaining why you believe you qualify for relief, including any specific events or circumstances you want us to consider.</li>\n <li><strong>Income Documentation:</strong> Proof of your current income and that of your spouse if applicable, such as recent pay stubs, W-2 forms, or other income statements.</li>\n <li><strong>Proof of Financial Situation:</strong> Documents showing your current financial situation, including bank statements, monthly bills, and any other liabilities.</li>\n <li><strong>Documentation of Marital Status:</strong> If applicable, legal documents related to separation, divorce, or annulment.</li>\n <li><strong>Proof of Residence:</strong> Documents that prove where each of you has lived during the tax years in question.</li>\n <li><strong>Any Correspondence from the IRS:</strong> If you have received any notices or letters from the IRS regarding your joint tax liability, please include copies.</li>\n </ol>\n <p>Please ensure all documents are clearly legible. You may send them via email, or upload. If you have any questions or need further clarification on what to provide, don't hesitate to reach out.</p>\n <p>We understand that this process can be complex, but we are here to guide you through it. Our goal is to ensure we have a comprehensive understanding of your situation to advocate for the most favorable outcome on your behalf.</p>",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
actionTaxSubject: "1099 NEC Income",
|
|
34
|
+
actionTitle: "1099 NEC Income",
|
|
35
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and require a comprehensive understanding of all your sources of income. Specifically, we need to account for your 1099 NEC Income. The 1099-NEC form is crucial for correctly reporting your non-employee compensation.</p>\n <p>To ensure a thorough and accurate tax preparation, please provide us with the following:</p>\n <ol>\n <li><b>All 1099-NEC forms</b> you received for the tax year.</li>\n <li>Details of any <b>additional non-employee compensation</b> not reported on a 1099-NEC form.</li>\n <li>Information regarding <b>expenses related to your 1099 NEC income</b>, if applicable.</li>\n </ol>\n <p>If you have not yet received all your 1099-NEC forms, please let us know, and provide an estimate of when you expect to receive them. This information is critical for accurately reporting your income and avoiding potential penalties or audits from the IRS.</p>\n <p>Please reach out to us directly should you have any questions or need further clarification. Your prompt response is greatly appreciated to ensure your tax return is processed efficiently and accurately.</p>\n",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
actionTaxSubject: "Schedule K-1 Information",
|
|
39
|
+
actionTitle: "Schedule K-1 Information",
|
|
40
|
+
actionInstructions: "<p>We understand that you have indicated the presence of Schedule K income for the current tax year. In order to ensure the accuracy and completeness of your tax return, it is imperative that we gather all necessary documents related to this income.</p>\n <p>If we are preparing your business return, rest assured that we will generate the applicable Schedule K-1(s) for your business interests. However, it is essential that we collect copies of <strong>all other Schedule K-1s</strong> you may have received to incorporate into your personal tax return.</p> \n <h3>Specific Document Request:</h3>\n <ol>\n <li>Any and all Schedule K-1(s) you have received from:</li>\n <ul>\n <li>Partnerships</li>\n <li>S Corporations</li>\n <li>Estate or Trusts</li>\n </ul>\n </ol>\n <p>Please ensure that all documents are <strong>clear and legible</strong> to prevent any delays in processing your return. You may submit these documents through our secure client portal, or contact us to make alternative arrangements if necessary.</p>\n <p>We appreciate your prompt attention to this request. Should you have any questions or require any assistance, please do not hesitate to reach out.</p>",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
actionTaxSubject: "Other Self-Employment Income",
|
|
44
|
+
actionTitle: "Other Self-Employment Income",
|
|
45
|
+
actionInstructions: "<p>We are in the process of preparing your taxes and have noted that you have indicated the presence of self-employment income not reported through 1099-NEC forms or a Schedule K-1. To ensure your tax return is accurate and maximizes your benefits, it's crucial we gather more details about these sources of income. Please provide the following information:</p>\n <ol>\n <li><strong>Description of each self-employment activity:</strong> Briefly describe the nature of each activity from which you derive self-employment income.</li>\n <li><strong>Dates of operation:</strong> For each self-employment activity, specify the dates or range of dates during which you earned income.</li>\n <li><strong>Total income generated:</strong> For each activity, provide the total amount of income earned before any expenses.</li>\n <li><strong>Expenses incurred:</strong> List all expenses related to each self-employment activity. Please categorize these expenses (e.g., office supplies, travel, advertising).</li>\n <li><strong>Records or documentation:</strong> Any existing records or documentation that corroborate your income and expenses, such as bank statements, receipts, invoices, or contracts.</li>\n </ol>\n <p>This information is vital for determining the correct amount of tax you owe and identifying any potential deductions that can minimize your tax liability. Please provide these details at your earliest convenience to ensure a smooth and efficient tax preparation process.</p>\n <p>If you have any questions or need assistance in gathering this information, please do not hesitate to contact us. Your timely cooperation is greatly appreciated, and we are here to help every step of the way.</p>",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
actionTaxSubject: "Employment Wages",
|
|
49
|
+
actionTitle: "Employment Wages",
|
|
50
|
+
actionInstructions: "<p>Thank you for entrusting us with the preparation of your tax returns. As part of our comprehensive review and in our quest to ensure the accuracy of your tax filings, we understand that you have received wages from employment over the past tax year.</p>\n <p>To proceed effectively, we kindly request the following documents and information:</p>\n <ol>\n <li><strong>W-2 Forms:</strong> Please provide copies of all W-2 forms received from your employers. This includes wages earned from all sources, not just from the S-Corporation, if applicable.</li>\n <li><strong>Verification of S-Corporation Wages:</strong> If we are also handling your business taxes for an S-Corporation, we likely have the wage information for that entity. However, for thoroughness and compliance, please confirm if the wages from the S-Corporation are fully represented in the documents we already hold. This will help us verify that all income is accurately reported.</li>\n <li><strong>Additional Income Documents:</strong> Should you have other sources of wage income (e.g., contract work, bonuses, etc.) not covered by the W-2 forms provided, please include any 1099 forms or other relevant documentation.</li>\n </ol>\n <p>Your cooperation is crucial for ensuring a smooth and efficient tax preparation process. Kindly provide the requested documents and information at your earliest convenience.</p>\n <p>If you have any questions or need further clarification, please do not hesitate to contact us directly. Thank you for your prompt attention to this matter.</p>",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
actionTaxSubject: "Property or Services Lieu Wages",
|
|
54
|
+
actionTitle: "Property/Services in Lieu of Wages",
|
|
55
|
+
actionInstructions: "<p>We are currently in the process of preparing your tax return and have noted that you received property and/or services in lieu of traditional wages during the tax year. This type of compensation constitutes taxable income and must be accurately reported to ensure your tax return is fully compliant with IRS regulations.</p>\n <p>To accurately recognize and report these items as taxable income, we require the following detailed information:</p>\n <ol>\n <li><strong>Description of Property or Services:</strong> Provide a detailed description of any property or services you received. Please include physical characteristics for property or the scope of services rendered.</li>\n <li><strong>Fair Market Value at Time of Receipt:</strong> Indicate the fair market value (FMV) of each property or service at the time you received it. If you have any appraisals or documents to support the FMV, please include them.</li>\n <li><strong>Documentation or Agreements:</strong> Provide any documentation or written agreements that detail the arrangement for receiving property or services in lieu of wages. This can include contracts, emails, or any form of communication that outlines the agreement.</li>\n <li><strong>Date of Receipt:</strong> Specify the date(s) on which you received the property or services.</li>\n <li><strong>Employer/Provider Information:</strong> Provide the name and contact information of the individual or entity that provided the property or services.</li>\n </ol>\n <p>Please ensure that all provided information is as accurate and complete as possible. Incomplete or inaccurate information may lead to delays in the preparation of your tax return or potential issues with the IRS.</p>\n <p>If you have any questions or need clarification regarding the information requested, please do not hesitate to contact us directly. Your prompt attention to this request is greatly appreciated and critical for the timely and accurate completion of your tax return.</p>",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
actionTaxSubject: "Employee Accountable Plan",
|
|
59
|
+
actionTitle: "Employee Accountable Plan",
|
|
60
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and noticed you've mentioned being reimbursed for certain expenses under an Employee Accountable Plan. To accurately account for these reimbursements and ensure compliance with IRS rules, we kindly request the following documents and information:</p>\n <ol>\n <li>A copy of the formal written Accountable Plan provided by your employer. This should outline the expense allowance and the specifics of the reimbursement policy.</li>\n <li>Any documentation or correspondence from your employer confirming your participation in the Accountable Plan.</li>\n <li>Details of the expenses reimbursed under the plan, including dates, amounts, and the nature of the expenses.</li>\n <li>Proof of expense (receipts or invoices) provided to your employer for reimbursement under the plan.</li>\n <li>Any additional documentation or information relevant to the reimbursements or the Accountable Plan.</li>\n </ol>\n <p>Please send us this information at your earliest convenience to ensure we can proceed smoothly with your tax return preparation. If you have any questions or need further clarification, do not hesitate to reach out.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
actionTaxSubject: "Taxable Fringe Benefits",
|
|
64
|
+
actionTitle: "Taxable Fringe Benefits",
|
|
65
|
+
actionInstructions: "\n <p>We are in the process of ensuring all forms of compensation, including taxable fringe benefits, are accurately reported on your tax returns. Based on our previous communication, it appears you may have received benefits that need to be reviewed further. To assist you properly, we request the following specific details:</p>\n<ol>\n <li><strong>Description of each benefit received:</strong> Please provide a brief description of the fringe benefits received during the tax year, including but not limited to company cars, memberships, educational assistance, etc.</li>\n <li><strong>Value of each benefit:</strong> The fair market value (FMV) of each benefit. If you're unsure, please provide an estimate and the basis for this estimate.</li>\n <li><strong>Any amounts contributed by you:</strong> If you made contributions toward the cost of any benefit, please specify the amounts and for which benefits.</li>\n <li><strong>Benefit documentation:</strong> Any available documentation that can support the information provided, such as statements, agreements, or receipts.</li>\n <li><strong>Dates:</strong> The period during which you received these benefits. Include specific dates if possible.</li>\n <li><strong>Employer Information:</strong> The name and contact information of the employer(s) providing these benefits.</li>\n</ol>\n<p>This information is crucial for accurately determining the taxable value of these fringe benefits and ensuring compliance with IRS regulations. If you have any questions or need assistance in gathering this information, please don't hesitate to contact us.</p>\n<p>We appreciate your prompt attention to this matter and look forward to assisting you further.</p>",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
actionTaxSubject: "Non Taxable Fringe Benefits",
|
|
69
|
+
actionTitle: "Non Taxable Fringe Benefits",
|
|
70
|
+
actionInstructions: "<p>We are in the process of finalizing your tax return and have identified potential non-taxable fringe benefits that may apply to your situation. To ensure accurate reporting and optimize your tax outcome, we kindly request the following detailed information regarding any non-taxable fringe benefits you may have received:</p>\n <ol>\n <li><strong>Description of each benefit:</strong> Please provide a detailed description of the non-taxable fringe benefits received during the tax year. This may include health savings accounts (HSAs), employee discounts, public transit passes, etc.</li>\n <li><strong>Value of each benefit:</strong> The fair market value (FMV) of each benefit. For non-taxable benefits, this helps in record-keeping and confirming exemption status.</li>\n <li><strong>Contribution amounts, if any:</strong> If you have contributed towards any of these benefits, indicate the amounts and for which benefits.</li>\n <li><strong>Benefit documentation:</strong> Any documentation that can corroborate the information provided, such as statements, agreements, or receipts.</li>\n <li><strong>Dates of receipt:</strong> The timeframe during which you received these benefits. Include as precise dates as possible.</li>\n <li><strong>Employer or provider information:</strong> The name and contact details of the employer(s) or third-party provider(s) offering these benefits.</li>\n </ol>\n <p>Gathering this information helps ensure that your tax filings are accurate and that you receive the full advantage of non-taxable fringe benefits. Please let us know if you need any help identifying or documenting these benefits.</p>\n <p>Your prompt response is highly appreciated as we strive to complete your tax preparation efficiently. Should you have any questions, feel free to contact us directly.</p>",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
actionTaxSubject: "Veteran Benefits",
|
|
74
|
+
actionTitle: "VA Benefits",
|
|
75
|
+
actionInstructions: "<p>We hope this message finds you well. As part of our ongoing effort to ensure the accuracy and completeness of your tax return, we understand that you have received Veteran Benefits during the tax year. To accurately assess the tax implications of these benefits, we kindly request additional information.</p>\n <p>To assist us in this task, please provide the following information:</p>\n <ol>\n <li>A detailed list of the Veteran Benefits you received, including any disability, education, and pension benefits.</li>\n <li>Official documentation for each type of benefit received, such as award letters or statements from the Department of Veterans Affairs (VA).</li>\n <li>Any correspondence from the VA or other relevant entities regarding the taxability of your benefits.</li>\n <li>Total amount received for each benefit throughout the tax year.</li>\n <li>Any other supporting documentation that can provide clarity on the nature and amount of your Veteran Benefits.</li>\n </ol>\n <p>This information is crucial for determining which benefits are taxable and ensuring your tax return is complete and accurate. Please submit these documents at your earliest convenience.</p>\n <p>If you have any questions or require assistance in gathering these documents, please do not hesitate to contact us. Thank you for your cooperation and trust in our services.</p>",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
actionTaxSubject: "Life Insurance Payments",
|
|
79
|
+
actionTitle: "Life Insurance Payments",
|
|
80
|
+
actionInstructions: "<p>We have noted your mention of receiving life insurance payments during the tax year. To accurately assess the tax implications and ensure these proceeds are indeed non-taxable, we require the following details:</p>\n <ol>\n <li>The total amount received from life insurance payments.</li>\n <li>Documentation or statements pertaining to the life insurance payments.</li>\n <li>The name of the insured individual and their relationship to you.</li>\n <li>Any communications or letters from the insurance company regarding the tax status of these payments.</li>\n <li>Details regarding if the policy was purchased with after-tax or pre-tax dollars.</li>\n <li>If any portion of the life insurance payment was an investment return, please provide related documents.</li>\n </ol>\n <p>This information is crucial for us to guarantee the accuracy and integrity of your tax return. Please provide the requested documents and information at your earliest convenience.</p>\n <p>Should you have any questions or need further assistance, feel free to contact us. We're here to help!</p>",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
actionTaxSubject: "Medicare Waiver Payments",
|
|
84
|
+
actionTitle: "Medicare Waiver Payments",
|
|
85
|
+
actionInstructions: "<p>We hope this message finds you well. As we proceed with preparing your tax returns, we noted that you have received Medicare Waiver Payments under the difficulty-of-care provisions during the tax year. To ensure we maximize your eligible income exclusions, it's crucial we verify certain information regarding your living arrangement, as per IRS guidelines.</p>\n <p>To assist us in confirming that these payments qualify for income exclusion, please provide the following information:</p>\n <ol>\n <li><strong>Proof of Residence:</strong> Documents proving that you and the individual under care shared the same primary residence during the receipt of these payments. This could include utility bills, a rental agreement, or homeowner's insurance in both of your names.</li>\n <li><strong>Details of the Care Recipient:</strong> Information about the person receiving care, including their relationship to you and any documentation that identifies their need for care (e.g., a letter from a healthcare provider).</li>\n <li><strong>Payment Records:</strong> Any records of the Medicare Waiver Payments you received, as this will help us determine the exact amounts and the periods covered.</li>\n <li><strong>Any Formal Agreements or Contracts:</strong> If there was a formal agreement or contract detailing the care provided, please include this as well. This is especially important if the care arrangement was facilitated through a state or third-party agency.</li>\n </ol>\n <p>This information is vital to ensure we comply with taxing authorities while accurately reflecting your finances. If any of these requirements pose a difficulty or if you have questions, please don't hesitate to contact us directly. Our goal is to support you through this process and optimize your tax benefits.</p>\n <p>Thank you for your prompt attention to this matter. We look forward to assisting you further.</p>",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
actionTaxSubject: "Disability Insurance Benefits",
|
|
89
|
+
actionTitle: "Disability Insurance Benefits",
|
|
90
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and noted that you received disability insurance benefits during the tax year. To accurately determine if these benefits are eligible to be excluded from your income, we require further details regarding the insurance premiums paid.</p>\n <p>Kindly provide the following information at your earliest convenience:</p>\n <ol>\n <li>The total amount of disability insurance benefits received during the tax year.</li>\n <li>Detailed statements or documentation showing the disability insurance benefits received.</li>\n <li>Confirmation on who paid the insurance premiums (you or your employer).</li>\n <li>If you have contributed to the payment of the premiums:\n <ul>\n <li>The amount you paid towards the premiums.</li>\n <li>Any supporting documents for the payments made by you (receipts or bank statements).</li>\n </ul>\n </li>\n <li>If your employer contributed to the payment of the premiums:\n <ul>\n <li>The amount paid by your employer towards the premiums.</li>\n <li>Any documents indicating employer contributions (pay stubs, employer letters).</li>\n </ul>\n </li>\n </ol>\n <p>This information is crucial for us to determine the taxable portion, if any, of your disability insurance benefits. Providing these details will help us ensure the accuracy of your tax filing and potentially lower your taxable income.</p>\n <p>Please do not hesitate to reach out if you have any questions or if we can be of further assistance. We appreciate your prompt response to this request.</p>",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
actionTaxSubject: "Disability Retirement Benefits",
|
|
94
|
+
actionTitle: "Disability Retirement Benefits",
|
|
95
|
+
actionInstructions: "<p>We are in the process of preparing your tax documents and have noted that you received disability retirement benefits during the tax year. In order to accurately determine the taxability of these benefits, we need additional details. The taxability of these benefits can depend on when you took retirement due to disability.</p>\n <p>Please provide the following information as soon as possible:</p>\n <ol>\n <li><strong>Date of Retirement:</strong> The exact date you retired due to disability.</li>\n <li><strong>Documentation of Disability Retirement:</strong> Any official documentation you have that confirms your retirement was due to disability. This may include letters from your employer, the retirement plan, or medical records.</li>\n <li><strong>Details of Benefits Received:</strong> Specific amounts and the source of the disability retirement benefits. Please include any related documents such as statements or notices.</li>\n <li><strong>Previous Year W-2 or 1099 Forms:</strong> If you received any wages or disability payments that were reported on W-2 or 1099 forms in the year of your retirement, please provide these forms.</li>\n <li><strong>Any Correspondence from the IRS:</strong> If you have received any notices or letters from the IRS regarding your disability retirement benefits, please include copies of these communications.</li>\n </ol>\n <p>The above information is vital to ensure your tax return is complete and accurate. Understanding the specifics of your disability retirement benefits will aid us in determining their taxability and ensuring that your tax obligations are precisely calculated.</p>\n <p>If you have any questions or need assistance gathering these documents, feel free to contact us. Your prompt response is highly appreciated.</p>",
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
actionTaxSubject: "Clergy Wages",
|
|
99
|
+
actionTitle: "Clergy Wages",
|
|
100
|
+
actionInstructions: "<p>We are in the process of preparing your tax returns and have noted that you received W-2 wages as a clergy member. To ensure accurate reporting and to potentially maximize your tax benefits, we require further details regarding your compensation package.</p>\n <p>Please provide the following documents and information at your earliest convenience:</p>\n <ol>\n <li><b>W-2 Form:</b> If not already provided, include any W-2 forms issued by your religious institution.</li>\n <li><b>Housing Allowance Documentation:</b> Detailed statement or letter from your religious institution specifying the amount designated as housing allowance.</li>\n <li><b>Self-Employment Tax:</b> Confirmation on whether you have taken a vow of poverty (if applicable), or any documentation related to opting out of self-employment tax.</li>\n <li><b>Expense Reimbursements:</b> Documentation showing any expense reimbursements received under an accountable plan.</li>\n <li><b>Other Compensation:</b> Information on any other compensation received in your capacity as clergy, including but not limited to love offerings, fees for services (weddings, funerals, etc.), and parsonage allowances.</li>\n </ol>\n <p>This information is crucial for us to accurately represent your earnings and to calculate any potential deductions correctly. Your prompt attention to this request will help ensure that your tax returns are prepared in a timely and efficient manner.</p>\n <p>If you have any questions or need further clarification on what is required, please do not hesitate to contact us. We are here to assist you through every step of this process.</p>\n <p>Thank you for your cooperation and prompt attention to this matter.</p>",
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
actionTaxSubject: "Interest Income",
|
|
104
|
+
actionTitle: "Interest Income",
|
|
105
|
+
actionInstructions: "<p>In reviewing your financial activities for the tax year, you indicated receiving interest income. To accurately determine the taxability of this income and ensure compliance with tax regulations, we require additional details. Kindly provide the following information:</p>\n <ol>\n <li><b>Source of Interest Income:</b> Please specify the institution(s) or entity(ies) from which you received interest income (e.g., banks, credit unions).</li>\n <li><b>Amount Received:</b> Confirm the total amount of interest income received from each source during the tax year.</li>\n <li><b>Account Types:</b> Identify the type of accounts that generated the interest (e.g., savings, checking, certificates of deposit).</li>\n <li><b>Tax Forms Received:</b> List any tax forms you have received related to interest income, such as Form 1099-INT or Form 1099-OID.</li>\n <li><b>Foreign Interest:</b> If any interest income was earned from foreign accounts or sources, please provide details, including the country of origin.</li>\n </ol>\n <p>Providing these details will enable us to accurately assess the tax implications of your interest income and ensure your tax return is complete and correct. You can attach the requested documents and information by replying to this email or uploading them directly to our secure client portal.</p>\n <p>If you have any questions or require assistance in gathering this information, do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
actionTaxSubject: "Bank Account Opening Gifts",
|
|
109
|
+
actionTitle: "Bank Account Opening Gifts",
|
|
110
|
+
actionInstructions: "<p>We are in the process of reviewing your tax situation and have noted that you received a gift for opening an account at a financial institution. To accurately determine the taxability of this income, we kindly request the following information:</p>\n <ol>\n <li>The name of the financial institution where the account was opened.</li>\n <li>The date the account was opened.</li>\n <li>A detailed description of the gift received (e.g., cash, merchandise, or services).</li>\n <li>The fair market value of the gift at the time it was received.</li>\n <li>Any documentation provided by the financial institution regarding the gift (e.g., a letter, email confirmation, or statement indicating the value of the gift).</li>\n <li>Confirmation if you have received more than one gift for opening accounts within the same tax year, and if so, the details for each.</li>\n </ol>\n <p>Please provide this information at your earliest convenience to ensure we can accurately assess the tax implications and comply with all IRS requirements.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
actionTaxSubject: "CD Interest",
|
|
114
|
+
actionTitle: "CD Interest",
|
|
115
|
+
actionInstructions: "<p>To ensure accurate reporting of your income from Certificates of Deposit (CDs) for the tax year, we kindly request the following information. This is essential to comply with IRS regulations and to potentially optimize your tax benefits.</p>\n <ol>\n <li><strong>Name of the Bank or Financial Institution:</strong> Where the CD is held.</li>\n <li><strong>Account Number:</strong> This helps in identifying the specific CD.</li>\n <li><strong>Total Interest Earned:</strong> The amount of interest earned from the CD during the tax year.</li>\n <li><strong>CD Term:</strong> The duration or term of the CD (e.g., 6 months, 1 year).</li>\n <li><strong>Date of Purchase:</strong> When you originally acquired the CD.</li>\n <li><strong>Maturity Date:</strong> When the CD reached or will reach its full term.</li>\n <li><strong>1099-INT Forms:</strong> If received, please include copies of any 1099-INT forms associated with the CD interest.</li>\n </ol>\n <p>Please provide this information at your earliest convenience to ensure accurate and timely preparation of your tax documents. You may upload the documents directly through our secure client portal or provide them via email.</p>\n <p>If you have any questions or need further assistance, do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
actionTaxSubject: "Tax Exempt Interest",
|
|
119
|
+
actionTitle: "Tax Exempt Interest",
|
|
120
|
+
actionInstructions: "<p>We understand that you have received tax-exempt interest during the tax year, possibly from municipal bonds or similar investments. To accurately prepare your tax returns and ensure compliance with tax regulations, we kindly request the following information:</p>\n <ol>\n <li><strong>Statements of Tax-Exempt Interest:</strong> Please provide all 1099-INT forms or equivalent statements that detail your tax-exempt interest income for the tax year.</li>\n <li><strong>Details of Issuing Entities:</strong> A list or statement identifying the entities that issued the bonds or similar investments. This includes municipal, state, or federal entities.</li>\n <li><strong>Investment Detail:</strong> A breakdown of the investments contributing to tax-exempt interest. This should include the purchase date, purchase amounts, and any related maturity dates.</li>\n <li><strong>Brokerage Account Statements:</strong> Copies of your brokerage account statements that detail transactions and holdings in tax-exempt investments.</li>\n <li><strong>AMT (Alternative Minimum Tax) Consideration:</strong> If available, documentation indicating whether any of the tax-exempt interest is subject to the Alternative Minimum Tax.</li>\n </ol>\n <p>This information is crucial for an accurate and efficient tax preparation process. Please forward the requested documents at your earliest convenience. If you have any questions or need assistance in gathering this information, do not hesitate to contact us.</p>\n <p>Thank you for your cooperation and prompt attention to this matter.</p>",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
actionTaxSubject: "Educational Savings Bond Interest",
|
|
124
|
+
actionTitle: "Educational Savings Bond Interest",
|
|
125
|
+
actionInstructions: "<p>We hope this message finds you well. As part of our continued effort to provide you with the best tax preparation services, we are reaching out to gather necessary documentation related to the interest you may have received from redeeming an Educational Savings Bond.</p>\n\n <p>To accurately assess the eligibility for exemption and to ensure compliance with the IRS, we kindly request you provide the following information:</p>\n <ol>\n <li>A copy of Form 1099-INT or similar statement provided by the financial institution, indicating the amount of interest received from the Educational Savings Bond.</li>\n <li>Detailed records of the Educational Savings Bonds redeemed during the tax year, including:\n <ul>\n <li>Bond serial numbers</li>\n <li>Issue dates</li>\n <li>Redemption dates</li>\n <li>Amounts</li>\n </ul>\n </li>\n <li>Receipts or documentation for qualified educational expenses paid during the year, including:\n <ul>\n <li>Tuition and fees</li>\n <li>Course materials</li>\n <li>Any other required expenses for enrollment or attendance at an eligible educational institution</li>\n </ul>\n </li>\n <li>Proof of enrollment from an eligible educational institution for the beneficiary of the bond.</li>\n </ol>\n <p>This information is crucial for determining the taxability of the interest income and potentially maximizing your tax benefits. We appreciate your prompt attention to this request and recommend compiling these documents at your earliest convenience.</p>\n <p>If you have any questions or need further assistance, please do not hesitate to contact us.</p>\n <p>Thank you for your cooperation and trust in our services.</p>",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
actionTaxSubject: "Dividend Income",
|
|
129
|
+
actionTitle: "Dividend Income",
|
|
130
|
+
actionInstructions: "<p>We are currently in the process of preparing your tax returns and have noted that you indicated receiving dividend income over the past tax year. To ensure we accurately report this income and optimize your tax situation, we kindly request the following documentation and information:</p>\n <ol>\n <li>All 1099-DIV forms received from corporations or mutual funds. This includes distributions of cash, stock, or other property.</li>\n <li>If applicable, details regarding any foreign dividends including the amount in foreign currency, the country of origin, and any foreign tax paid.</li>\n <li>For dividends reinvested, please provide statements or confirmations showing these transactions.</li>\n <li>Any other relevant documentation or information regarding dividends not covered by a 1099-DIV.</li>\n </ol>\n <p>Please ensure all documents are clear and legible to avoid any processing delays.</p>\n <p>Your prompt response is appreciated as it will help us in completing your tax preparations efficiently. If you have any questions or need clarification, do not hesitate to contact us.</p>",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
actionTaxSubject: "Disposed Capital Assets",
|
|
134
|
+
actionTitle: "Disposed Capital Assets",
|
|
135
|
+
actionInstructions: "<p>We understand that you've indicated disposing of capital assets during the tax year. To accurately assess the tax implications and ensure your tax filings are complete and compliant, we require detailed information regarding these transactions.</p>\n <p>Please provide the following details at your earliest convenience:</p>\n <ol>\n <li><b>Description of each disposed asset:</b> Include the type of asset (e.g., real estate, stocks, bonds).</li>\n <li><b>Date of acquisition:</b> The purchase date or the date you originally came into possession of each asset.</li>\n <li><b>Acquisition cost:</b> The original purchase price or cost basis of each asset, including any improvements made.</li>\n <li><b>Date of disposal:</b> The specific date on which each asset was sold, exchanged, or otherwise disposed of.</li>\n <li><b>Sale or disposal proceeds:</b> The total amount received from the disposal of the asset.</li>\n <li><b>Associated expenses:</b> Any costs incurred directly from the sale or disposal process, such as broker's fees, advertising, legal fees, etc.</li>\n <li><b>Reason for disposal:</b> Briefly describe the reason behind the disposal of the asset, if applicable.</li>\n </ol>\n <p>This information is crucial for calculating potential capital gains or losses and determining their impact on your tax obligations. Please attach any supporting documentation, such as sales receipts, deeds, contracts, or brokerage statements, to substantiate the details provided.</p>\n <p>We appreciate your prompt attention to this matter and are here to assist with any questions you may have. You can reach us via email or phone for further discussion.</p>\n <p>Thank you for your cooperation.</p>",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
actionTaxSubject: "Disposed Digital Assets",
|
|
139
|
+
actionTitle: "Disposed Digital Assets",
|
|
140
|
+
actionInstructions: "<p>You answered \"Yes\" to disposing of digital assets this tax year. To accurately report your transactions, please submit the following:</p>\n <ol>\n <li>Transaction dates</li>\n <li>Types of assets bought, sold, or exchanged</li>\n <li>Amounts involved in each transaction</li>\n <li>Any 1099 forms received for digital asset activities</li>\n <li>Details of mining, staking, or airdrop income, if applicable</li>\n </ol>\n <p><strong>Note:</strong> Include all sales, trades, and exchanges, even if you didn't receive a tax form.</p>",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
actionTaxSubject: "Mutual Fund Gain",
|
|
144
|
+
actionTitle: "Mutual Fund Gain",
|
|
145
|
+
actionInstructions: "<p>In order to accurately report your mutual fund earnings on your tax return, as per your indication of receiving gains from a mutual fund or similar investment, we require the following documents:</p>\n <ol>\n <li><strong>1099-DIV Form:</strong> This form is crucial as it provides details on dividends and distributions you received from your mutual fund investments. Please ensure to provide this form if your mutual fund earnings were reported on it.</li>\n <li><strong>Statement of Account:</strong> This provides a comprehensive view of all transactions within your account, including purchases, redemptions, and reinvested dividends which help us understand the context of your gains.</li>\n <li><strong>Year-End Summary:</strong> Often mutual funds provide a year-end summary to their investors. This summary can be very helpful in preparing your taxes as it consolidates all the relevant information.</li>\n <li><strong>Any other relevant documents:</strong> This could include additional 1099 forms (like 1099-B if any sales occurred), original investment statements, or anything else that could impact your tax situation.</li>\n </ol>\n <p>We understand that gathering these documents may require some time, however, having these readily available will ensure the accuracy and efficiency of your tax preparation process. Your prompt response will be greatly appreciated.</p>\n <p>If you have any questions or difficulties obtaining these documents, please do not hesitate to contact us.</p>",
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
actionTaxSubject: "Mutual Fund Disposal",
|
|
149
|
+
actionTitle: "Mutual Fund Disposal",
|
|
150
|
+
actionInstructions: "<p>We understand that you've made a disposal of shares in a mutual fund during the tax year. To accurately assess the tax impact and ensure your tax return is completed accurately, we require the following information:</p>\n <ol>\n <li>The <strong>1099-B form</strong> associated with the mutual fund disposal, if available. This document provides details on the sale of your shares.</li>\n <li>Detailed <strong>record of the purchase</strong> of the mutual fund shares including the purchase date and cost basis. This is crucial for calculating any capital gain or loss.</li>\n <li>If the 1099-B form is not available, please provide any <strong>brokerage statements</strong> or other documentation that shows the disposal of the mutual fund shares, including the sale date and amount.</li>\n <li>Details of any <strong>reinvested dividends</strong> or capital gains distributions, as these can adjust your cost basis and affect the calculation of your capital gain or loss.</li>\n </ol>\n <p>Having this information is essential for ensuring that we accurately report the disposal of your mutual fund shares and accurately calculate any potential capital gains or losses. This will also help us to optimize your tax liability for the year.</p>\n <p>Should you have any questions about gathering this information, please don't hesitate to reach out. We're here to help you through every step of the process.</p>",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
actionTaxSubject: "Wash Sale",
|
|
154
|
+
actionTitle: "Wash Sale Transaction",
|
|
155
|
+
actionInstructions: "<p>We have noted your indication of a possible Wash Sale transaction. To accurately assess the tax impact and ensure compliance with IRS rules, we kindly request the following information:</p>\n <ol>\n <li><strong>Detailed transaction records</strong> - Please provide a comprehensive list of the security that was sold and then repurchased, including dates and amounts for each transaction.</li>\n <li><strong>Cost basis for repurchased security</strong> - Details of the cost basis for the securities repurchased within a 61-day window (30 days before to 30 days after the sale).</li>\n <li><strong>Account statements</strong> - Copies of your brokerage account statements showing the transactions in question.</li>\n <li><strong>Losses realized</strong> - Documentation of any losses realized from these transactions.</li>\n <li><strong>Any correspondence</strong> - Correspondence from brokers or financial advisors regarding these transactions.</li>\n </ol>\n <p>Please ensure that the documents are organized and clearly labeled for each transaction. This will facilitate a smoother and quicker tax preparation process.</p>\n <p>Understanding the specifics of your Wash Sale transaction is crucial for us to provide accurate tax advice and preparation. Further, this information will assist in determining how the Wash Sale rule affects the deductibility of any losses you might have incurred.</p>\n <p>We appreciate your prompt attention to this matter. Please provide the requested documents as soon as possible, to ensure timely completion of your tax filings.</p>\n <p>If you have any questions or need assistance gathering these documents, don't hesitate to contact us. Your cooperation is greatly appreciated.</p>",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
actionTaxSubject: "Sold Home",
|
|
159
|
+
actionTitle: "Sold Home",
|
|
160
|
+
actionInstructions: "<p>We understand that you have sold a personal home during the tax year. To accurately assess the tax implications and ensure compliance with IRS regulations, please provide the following details:</p>\n <ol>\n <li><strong>Date of Sale:</strong> The closing date when the sale was officially completed.</li>\n <li><strong>Sale Price:</strong> The total amount you received for the home.</li>\n <li><strong>Cost Basis:</strong> Original purchase price, plus any improvements made to the home.</li>\n <li><strong>Property Details:</strong> Address and a brief description of the property sold.</li>\n <li><strong>Main Residence or Not:</strong> Please confirm if this was your main residence for at least two of the last five years prior to the sale.</li>\n <li><strong>Records of Home Improvements:</strong> Receipts or records of any major improvements made to the property, which can affect the cost basis.</li>\n <li><strong>Previous Use:</strong> If not always used as a personal home, details on any use of the property for rental, business, or other non-personal use.</li>\n <li><strong>Related Expenses:</strong> Any costs associated with the sale, such as legal fees, real estate agent commissions, and home staging expenses.</li>\n </ol>\n <p>This information is critical for determining potential tax benefits or obligations. Please provide these details as soon as possible, to ensure timely completion of your tax return. Should you have any questions, feel free to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
actionTaxSubject: "Installment Sale Payments",
|
|
164
|
+
actionTitle: "Installment Sale Payments",
|
|
165
|
+
actionInstructions: "<p>We understand you've sold property this year under an installment plan. To accurately report this transaction and ensure compliance with tax regulations, we require the following information:</p>\n <ol>\n <li><strong>Sale Agreement:</strong> A copy of the complete sale agreement detailing the terms of the installment sale.</li>\n <li><strong>Property Description:</strong> A detailed description of the property sold (e.g., land, building, equipment).</li>\n <li><strong>Payment Schedule:</strong> Information on the payment schedule agreed upon, including the dates and amounts of each installment.</li>\n <li><strong>Amounts Received:</strong> Total amounts received during the tax year, including down payment and any installment payments.</li>\n <li><strong>Principal & Interest Breakdown:</strong> A breakdown of the amounts received between principal and interest for the tax year.</li>\n <li><strong>Property Basis:</strong> Documentation regarding the property's original cost, improvements made, and any depreciation taken if applicable.</li>\n <li><strong>Expense Documentation:</strong> Any relevant expenses in relation to the sale that might be deductible.</li>\n <li><strong>Buyer Information:</strong> Legal name and contact details of the buyer.</li>\n </ol>\n <p>This information is crucial for accurately calculating any profit or loss from the sale and determining the correct tax implications of the installment payments received.</p>\n <p>Please provide the requested documents as soon as possible to ensure timely preparation of your tax returns. You can upload the documents directly through our secure client portal or email them to tax@lendahandaccounting.com.</p>\n <p>Should you have any questions or need further clarification, please don't hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
actionTaxSubject: "Worthless Securities",
|
|
169
|
+
actionTitle: "Worthless Securities",
|
|
170
|
+
actionInstructions: "<p>As you indicated that you have had investments, such as stocks or bonds, that became completely worthless this year, we need to gather specific information to properly report these on your tax return. Please provide the following details:</p>\n <ol>\n <li><strong>Description of the Security:</strong> Full name and type of each security that became worthless.</li>\n <li><strong>Purchase Details:</strong> Date of purchase and the purchase price for each security.</li>\n <li><strong>Worthlessness Determination Date:</strong> The exact date when you determined the security to be worthless.</li>\n <li><strong>Documentation:</strong> Any official documentation you received or used to determine that the investments became worthless.</li>\n <li><strong>Attempts to Sell or Trade:</strong> A brief description of any attempts made to sell or trade the securities before determining they were worthless.</li>\n <li><strong>Investment Account Statements:</strong> Copies of your investment account statements showing the worthless securities and their value over time, leading up to their declared worthlessness.</li>\n </ol>\n <p>Please provide this information at your earliest convenience to ensure accurate and timely completion of your tax return. If you have any questions or need further clarification, do not hesitate to contact us.</p>\n <p>Thank you for your cooperation.</p>",
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
actionTaxSubject: "Section 1244 Business Stock",
|
|
174
|
+
actionTitle: "Section 1244 Business Stock",
|
|
175
|
+
actionInstructions: "<p>We are reaching out to gather more details regarding the sale of shares in a small business where you were an original investor. As you indicated a loss on this investment, it's crucial to evaluate whether this qualifies for special tax treatment under Section 1244. To accurately analyze and report these activities, please provide the following information:</p>\n <ol>\n <li>The <strong>certificate of incorporation</strong> or other documentation confirming the stock qualifies as Section 1244 stock.</li>\n <li>A <strong>detailed statement</strong> of the investment, including:\n <ul>\n <li>Amount and date of the original investment.</li>\n <li>Number of shares purchased.</li>\n <li>Proof of being an original holder.</li>\n </ul>\n </li>\n <li><strong>Documentation of the sale</strong>, specifying:\n <ul>\n <li>Date of sale.</li>\n <li>Number of shares sold.</li>\n <li>Sale price.</li>\n <li>Any associated expenses with the sale.</li>\n </ul>\n </li>\n <li>A brief explanation of the circumstances leading to the loss.</li>\n </ol>\n <p>This information will enable us to assess the eligibility for a beneficial tax treatment under Section 1244, potentially minimizing your taxable income. Please submit the requested documents as soon as possible to ensure timely filing.</p>\n <p>If you have any questions or need further clarification, do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
actionTaxSubject: "Related Party Transactions",
|
|
179
|
+
actionTitle: "Related Party Transactions",
|
|
180
|
+
actionInstructions: "<p>We received your response indicating that there were transactions with related parties during the tax year. To accurately assess these transactions and incorporate them into your tax filings, we kindly request the following detailed information:</p>\n <ol>\n <li><strong>Description of the Transactions:</strong>\n <ul>\n <li>Type of transactions (e.g., sale, trade, transfer of property or investments).</li>\n <li>Date(s) of transactions.</li>\n <li>Description of items or properties transferred.</li>\n </ul>\n </li>\n <li><strong>Parties Involved:</strong>\n <ul>\n <li>Names and relationships to you (e.g., family member, friend, or business entity).</li>\n <li>If a business entity is involved, your and your family's ownership percentage in the business.</li>\n </ul>\n </li>\n <li><strong>Financial Details of the Transactions:</strong>\n <ul>\n <li>Market value of property or investments at the time of transaction.</li>\n <li>Amount received or paid.</li>\n <li>Any exchange of goods, services, or other assets, including their fair market value.</li>\n </ul>\n </li>\n <li><strong>Documentation:</strong>\n <ul>\n <li>Copies of contracts or agreements.</li>\n <li>Receipts or proof of payment/exchange.</li>\n <li>Appraisals or valuations of property or investments, if applicable.</li>\n </ul>\n </li>\n </ol>\n <p>This information is critical for ensuring compliance with tax laws regarding related party transactions and avoiding any potential penalties or audits. Please provide these details at your earliest convenience to facilitate the completion of your tax preparations.</p>\n <p>If you have any questions or require clarification, do not hesitate to contact us. Thank you for your prompt attention to this matter.</p>",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
actionTaxSubject: "Section 121 Home Sale",
|
|
184
|
+
actionTitle: "Section 121 Home Sale",
|
|
185
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and noted that you have sold your main home this tax year. To accurately determine the exclusion of gain and ensure compliance with IRS rules, specific information is required. Below is a detailed list of what we need from you:</p>\n <ol>\n <li><strong>Details of the Sale:</strong>\n <ul>\n <li>Date of sale</li>\n <li>Selling price</li>\n <li>Any selling expenses (e.g., real estate commissions, legal fees, etc.)</li>\n </ul>\n </li>\n <li><strong>Cost Basis Information:</strong>\n <ul>\n <li>Date of purchase</li>\n <li>Original purchase price</li>\n <li>Records of improvements made (with dates and costs)</li>\n <li>Any casualty losses claimed and insurance reimbursements received while owning the property</li>\n </ul>\n </li>\n <li><strong>Residency and Use Data:</strong>\n <ul>\n <li>Total years of ownership</li>\n <li>Total years the property was used as your main home</li>\n <li>Any periods the property was rented out or used for business</li>\n <li>Any special circumstances that may qualify for an exception to the physical presence requirement (e.g., health issues, employment changes)</li>\n </ul>\n </li>\n <li><strong>Prior Gain Exclusions:</strong>\n <ul>\n <li>Have you sold another main home within the last two years and claimed exclusion?</li>\n <li>If yes, details of the prior sale including date and amount of gain excluded</li>\n </ul>\n </li>\n </ol>\n <p>Please provide this information at your earliest convenience to ensure accurate and timely filing of your tax return. If you have any questions or need clarification on what is required, do not hesitate to contact us.</p>\n <p>Thank you for your cooperation.</p>",
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
actionTaxSubject: "Section 1031 Exchange",
|
|
189
|
+
actionTitle: "Section 1031 Exchange",
|
|
190
|
+
actionInstructions: "<p>We hope this message finds you well. In reviewing your records, it has come to our attention that you may have engaged in a Section 1031 exchange. To accurately assess the tax implications and ensure compliance with relevant IRS guidelines, we require some additional information.</p>\n <p>Please provide the following details at your earliest convenience:</p>\n <ol>\n <li><strong>Property Description:</strong> A detailed description of both the relinquished property and the replacement property. Please include location, type of property (e.g., commercial, residential), and any identifying numbers (e.g., parcel number).</li>\n <li><strong>Transaction Dates:</strong> The date on which the relinquished property was transferred, and the date the replacement property was received. These dates are crucial to determine compliance with the 45-day identification and 180-day exchange completion requirements.</li>\n <li><strong>Transaction Values:</strong> The fair market value of both the relinquished and replacement properties at the time of the exchange, along with any financial adjustments or additional cash received. This is necessary to calculate any potential gain or loss.</li>\n <li><strong>Intermediary Details:</strong> Information about any qualified intermediary used during the exchange, including their name, contact information, and details of their involvement. If no intermediary was used, please explain how the exchange was facilitated.</li>\n <li><strong>Original Purchase Information:</strong> The original purchase price and date of acquisition for the relinquished property. This information assists in determining the basis of the property.</li>\n <li><strong>Improvements or Expenses:</strong> Details of any improvements made to the replacement property within the exchange period or any additional expenses incurred that need to be accounted for in the property's basis.</li>\n </ol>\n <p>This information is crucial for evaluating the tax implications of your Section 1031 exchange and ensuring that all IRS requirements are met. It also helps us to advise you accurately on any potential deferred tax liabilities or benefits associated with the exchange.</p>\n <p>Please do not hesitate to contact us if you have any questions or need assistance in gathering these details. We are here to help you through every step of the process.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
actionTaxSubject: "Involuntary Conversion",
|
|
194
|
+
actionTitle: "Involuntary Conversion",
|
|
195
|
+
actionInstructions: "<p>We understand that you may have undergone a Section 1033 exchange (involuntary conversion) this tax year. To accurately assess the tax implications and ensure maximum compliance and benefit for you, we require detailed information regarding this event. Please provide the following details at your earliest convenience:</p>\n <ol>\n <li><strong>Nature of the Property:</strong> Describe the type of property involved (e.g., real estate, personal property, etc.).</li>\n <li><strong>Details of the Involuntary Conversion:</strong> Specify the circumstances that led to the involuntary conversion (e.g., natural disaster, theft, condemnation).</li>\n <li><strong>Insurance Proceeds Received:</strong> Indicate the amount of any insurance proceeds received as compensation for the conversion.</li>\n <li><strong>Reinvestment of Proceeds:</strong> Detail any reinvestment of the proceeds into similar property, including types of properties acquired, dates of acquisition, and amounts reinvested.</li>\n <li><strong>Timeline of Events:</strong> Provide a timeline of the key events, from the date of the involuntary conversion to the reinvestment of proceeds, if applicable.</li>\n <li><strong>Documentation:</strong> Attach any relevant documentation such as insurance settlement statements, purchase contracts for replacement property, or official notices of condemnation.</li>\n </ol>\n <p>Please ensure all provided information is accurate and complete to facilitate an efficient tax preparation process. We're here to assist with any questions you might have regarding this request.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
actionTaxSubject: "Rental Income",
|
|
199
|
+
actionTitle: "Rental Income",
|
|
200
|
+
actionInstructions: "\n <p>I hope this message finds you well. As we proceed with preparing your taxes, we noticed that you indicated receiving rental income during the tax year. To ensure we accurately calculate your tax obligations and explore potential deductions or credits, we need some more detailed information regarding this rental income.</p>\n<p>Please provide the following information at your earliest convenience:</p>\n<ol>\n <li>The address of the property generating the rental income.</li>\n <li>Total amount of rental income received in the tax year.</li>\n <li>Months the property was rented out.</li>\n <li>Any periods of personal use of the rental property.</li>\n <li>A summary of expenses related to the rental property, including but not limited to: property management fees, maintenance and repairs, property taxes, insurance, and mortgage interest (if applicable).</li>\n <li>Details of any major improvements or renovations done during the tax year.</li>\n</ol>\n<p>This information will help us paint a high-level overview of your rental income, allowing us to ensure we take advantage of any applicable deductions and accurately report your income. Your cooperation is greatly appreciated and crucial for the timely and effective preparation of your tax documents.</p>\n<p>If you have any questions, or if there's any other way I can assist, please don't hesitate to get in touch.</p>",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
actionTaxSubject: "Advanced Rent",
|
|
204
|
+
actionTitle: "Advanced Rent",
|
|
205
|
+
actionInstructions: "<p>We have noted that you have indicated receiving advanced rent payments this year for your rental property. To accurately report this on your tax return, we require some additional details. Please provide the following information:</p>\n <ol>\n <li><strong>Total amount of advanced rent received:</strong> The sum total of all rent payments received in advance (covering future periods beyond the current month).</li>\n <li><strong>Date(s) of receipt:</strong> The specific date(s) on which you received these advanced rent payments.</li>\n <li><strong>Rental period covered:</strong> The range of dates (start and end) that each advanced rent payment covers.</li>\n <li><strong>Property address:</strong> The address of the rental property for which the advanced rent was paid.</li>\n <li><strong>Lease agreement:</strong> A copy of the lease agreement(s) with the tenant(s) that specifies the terms of the advanced rent payment(s).</li>\n <li><strong>Any partial refunds issued:</strong> If any refunds were issued against the advanced rents received, please provide details and respective amounts.</li>\n </ol>\n <p>This information is pivotal in ensuring your tax return is accurate and compliant with relevant tax laws. Please ensure the details are accurate and complete. Should you have any questions or require clarification on what is needed, feel free to reach out.</p>\n <p>Thank you for your cooperation and prompt attention to this matter.</p>",
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
actionTaxSubject: "Lease Cancellation",
|
|
209
|
+
actionTitle: "Lease Cancellation",
|
|
210
|
+
actionInstructions: "<p>We have noted in your preliminary tax information that you received payment from a tenant for early lease cancellation. To accurately report this and assess any tax implications, we require the following detailed documents and information:</p>\n <ol>\n <li><strong>Lease Agreement:</strong> A copy of the original lease agreement with the tenant who paid to terminate their lease early.</li>\n <li><strong>Amendment or Termination Agreement:</strong> Any documents that formally acknowledge the early termination of the lease, including any penalties, the termination date, and other relevant terms.</li>\n <li><strong>Payment Records:</strong> Documentation of the payment received for lease termination. This could include bank statements showing the transaction, a receipt provided to the tenant, or any written agreement specifying the amount.</li>\n <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>\n </ol>\n <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>\n <p><strong>Action Required:</strong> Please provide these documents at your earliest convenience to ensure timely completion of your tax preparation. You may send them via email at tax@lendahandaccounting.com, or upload through our secure client portal.</p>\n <p>If you have any questions or need further clarification, do not hesitate to contact us. We're here to help!</p>\n <p>Thank you for your prompt attention to this request.</p>",
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
actionTaxSubject: "Paid Advance Expenses",
|
|
214
|
+
actionTitle: "Paid Advance Expenses",
|
|
215
|
+
actionInstructions: "<p>As part of our tax preparation process, we've noted that you've indicated making payments for insurance premiums or similar costs related to your rental property, which cover periods beyond the current tax year. To accurately account for these prepaid expenses in your tax filings, we require the following detailed information:</p>\n<ol>\n <li><strong>Documentation of Paid Expenses:</strong> Please provide all receipts, invoices, or contracts showing the payment of insurance premiums or similar expenses. This should clearly indicate the amount paid, the date of payment, and the coverage period.</li>\n <li><strong>Coverage Period Details:</strong> We need specific details regarding the coverage period for each expense. Please include documentation or a written summary that specifies the start and end dates of the coverage periods that extend beyond the current year.</li>\n <li><strong>Property Information:</strong> Confirm the address or identification of the rental property(ies) to which these expenses apply.</li>\n <li><strong>Purpose of the Expense:</strong> For documentation purposes, provide a brief explanation of the nature of each expense (e.g., property insurance, liability insurance).</li>\n</ol>\n<p>Please remember that having accurate and comprehensive documentation will aid in ensuring that your tax returns are prepared correctly, potentially leading to tax benefits related to these prepaid expenses.</p>\n<p>We appreciate your prompt attention to this request and your cooperation in providing the required information. Should you have any questions or need further clarification, please do not hesitate to contact us directly.</p>",
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
actionTaxSubject: "Benefit Value Increase",
|
|
219
|
+
actionTitle: "Benefit Value Increase",
|
|
220
|
+
actionInstructions: "<p>We appreciate your cooperation in providing necessary documents for tax preparation. \n As per your response indicating payment for local improvements \n or services that directly increase the value of your rental property, \n we need further details to ensure the accurate completion of your tax documentation.</p>\n <p>Please provide the following information at your earliest convenience:</p>\n <ol>\n <li>Description of the improvement or service provided (e.g., street repairs, new sidewalks).</li>\n <li>Date(s) of the improvement or service.</li>\n <li>Total cost associated with each improvement or service.</li>\n <li>Proof of payment for the improvement or service (receipts, bank statements, etc.).</li>\n <li>Any official notices or documentation from the local municipality regarding the improvements or charges.</li>\n <li>Details of how the improvement or service specifically benefited your rental property.</li>\n </ol>\n <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>\n <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>\n <p>Thank you for your attention to this matter.</p>",
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
actionTaxSubject: "Forfeited Security Deposit",
|
|
224
|
+
actionTitle: "Forfeited Security Deposit",
|
|
225
|
+
actionInstructions: "<p>As part of our ongoing efforts to ensure your tax filings are accurate and compliant, we've noted that you answered <strong>yes</strong> to having one or more tenants who did not get their security deposit back this year due to either breaking the lease terms or leaving damage requiring repair.</p>\n <p>To proceed with your tax preparation, we kindly request the following information:</p>\n <ol>\n <li>A list of each tenant whose security deposit was forfeited, including:</li>\n <ul>\n <li>Tenant's name</li>\n <li>Rental address</li>\n <li>Date of lease termination</li>\n </ul>\n <li>Documentation or communication evidencing the forfeiture reason, such as:</li>\n <ul>\n <li>Copy of the lease agreement showing the breached terms</li>\n <li>Photos or repair invoices for damages caused by the tenant</li>\n <li>Any written notices provided to the tenant regarding the forfeiture</li>\n </ul>\n <li>The total amount of each forfeited security deposit.</li>\n <li>Any receipts or invoices for repairs and maintenance directly related to the reasons for security deposit forfeiture.</li>\n </ol>\n <p>Please ensure this information is provided in a clear and organized manner to facilitate a smooth and efficient tax preparation process. Should you have any questions or need further clarification, do not hesitate to reach out.</p>\n <p>We appreciate your prompt attention to this matter. Thank you for your cooperation.</p>",
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
actionTaxSubject: "Non-Cash Rent",
|
|
229
|
+
actionTitle: "Non-Cash Rent",
|
|
230
|
+
actionInstructions: "<p>We note from your earlier responses that you have received non-cash forms of payment in lieu of rent this year. To accurately report this on your tax return, we require detailed information on these transactions. Kindly provide the following:</p>\n <ol>\n <li><strong>Description of Service or Goods Received:</strong> Please provide a detailed description of the service, goods, or property you received as rent payment. For instance, \"Repair services for the kitchen plumbing\" or \"a laptop computer\".</li>\n <li><strong>Value Estimation:</strong> An estimated value of the service, goods, or property received at the time of the transaction. If possible, include any documentation that supports this valuation, such as receipts, invoices, or written agreements.</li>\n <li><strong>Date(s) of Transaction:</strong> Specific date(s) when you received these goods or services.</li>\n <li><strong>Information about the Tenant or Provider:</strong> Name and contact information of the individual or entity that provided the goods or services.</li>\n <li><strong>Any Formal Agreements:</strong> Copies of any written agreements or contracts that outline this arrangement.</li>\n <li><strong>Receipts or Documentation of the Transaction:</strong> Any receipts, invoices, or other documentation that evidences the exchange.</li>\n </ol>\n <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>\n <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>\n <p>Thank you for your attention to this matter.</p>",
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
actionTaxSubject: "Rental Property Depreciation",
|
|
234
|
+
actionTitle: "Rental Property Depreciation",
|
|
235
|
+
actionInstructions: "<p>In reviewing your accounts, we've noted that all your rental properties are currently being depreciated as part of their tax treatment in our financial records. This method is crucial for accurate financial reporting and tax efficiency. However, it has come to our attention that there may be discrepancies or updates required in our records regarding the depreciation of your rental properties.</p>\n <p>To ensure the accuracy and integrity of your financial and tax reporting, we kindly request your assistance in verifying the current status of your rental properties with regards to depreciation.</p>\n <ol>\n <li>Confirm whether all your rental properties are being depreciated in our books. If this is accurate, no action is required on your part.</li>\n <li>If there are any rental properties <strong>not</strong> currently being depreciated, please provide the following details for each property:</li>\n <ul>\n <li>Property Address</li>\n <li>Date of Purchase</li>\n <li>Purchase Price</li>\n <li>Reason for Non-Depreciation</li>\n <li>Any additional relevant information</li>\n </ul>\n </ol>\n <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>\n <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>\n <p>Thank you for your attention to this matter and your continued trust in our services.</p>",
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
actionTaxSubject: "Rental Repairs",
|
|
239
|
+
actionTitle: "Rental Repairs",
|
|
240
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and noted that you've indicated making necessary repairs to your rental property to keep it in good working condition. To accurately report these expenses and ensure you receive the appropriate tax benefits, we kindly request the following information:</p>\n <ol>\n <li>A detailed list of all repairs made during the tax year. Please include:\n <ul>\n <li>The nature of each repair (e.g., fixing leaks, painting, repairing appliances).</li>\n <li>The date each repair was completed.</li>\n <li>The location/address of the property where repairs were made.</li>\n </ul>\n </li>\n <li>Receipts or invoices for each repair made. This should include:\n <ul>\n <li>The service provider\u2019s name and contact information.</li>\n <li>The amount paid for each repair.</li>\n <li>A brief description of the work performed.</li>\n <li>The method of payment used.</li>\n </ul>\n </li>\n <li>If any repairs were made by yourself or an unlicensed contractor, please provide:\n <ul>\n <li>A detailed description of the work performed.</li>\n <li>The cost of materials purchased, supported by receipts.</li>\n <li>The estimated number of hours spent on each repair, along with a reasonable hourly rate for labor.</li>\n </ul>\n </li>\n </ol>\n <p>Please note that accurate and comprehensive documentation is crucial for us to optimize your tax deductions related to property repair expenses. Should you have any questions or require further clarification on what is needed, do not hesitate to contact us.</p>\n <p>We appreciate your prompt attention to this request and look forward to assisting you further.</p>",
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
actionTaxSubject: "Rental Improvements",
|
|
244
|
+
actionTitle: "Rental Improvements",
|
|
245
|
+
actionInstructions: "<p>Thank you for your response indicating that you've made upgrades or enhancements to your rental property this tax year. To accurately incorporate these improvements into your tax documentation, we require the following detailed information:</p>\n <ol>\n <li><strong>Description of Each Improvement:</strong> Please provide a brief description of each upgrade or enhancement made to the property. This could include renovations, additions, or any upgrades that have increased its value, extended its lifespan, or adapted it to new uses.</li>\n <li><strong>Dates of Improvements:</strong> The exact date or range of dates when the improvements were started and completed.</li>\n <li><strong>Costs Involved:</strong> Detailed expenses related to each improvement project. This includes materials, labor, permits, and any other relevant costs. Please provide itemized receipts or invoices if available.</li>\n <li><strong>Proof of Payment:</strong> Copies of cancelled checks, bank statements, or electronic payment confirmations that prove payment for the improvements.</li>\n <li><strong>Before and After Pictures:</strong> If available, photographs of the property before and after the improvements were made. This helps in substantiating the enhancement to your property's value.</li>\n <li><strong>Contractor Information:</strong> If contractors were used, please provide their business names, addresses, and contact information.</li>\n </ol>\n <p>This information is crucial for accurately computing potential tax deductions or benefits that may be applicable to you as a result of these property improvements. Please ensure all documents are gathered and submitted as soon as possible, to ensure timely processing of your tax returns.</p>\n <p>Should you have any questions or need further clarification, feel free to contact us. We're here to assist you through every step of your tax preparation process.</p>",
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
actionTaxSubject: "Rental Activity Participation",
|
|
249
|
+
actionTitle: "Rental Activity Participation",
|
|
250
|
+
actionInstructions: "<p>As we move forward with your tax preparation, it has become necessary to collect a bit more information regarding your active participation in rental property activities. This is crucial for passing specific tax tests that apply to individuals actively involved in their rental properties.</p>\n <p>Please provide the following additional details to ensure we meet all requirements:</p>\n <ol>\n <li><strong>Details of Participation:</strong> A brief description of your active roles this tax year. This includes making decisions such as approving new tenants, setting rental terms, or authorizing repairs and maintenance.</li>\n <li><strong>Time Spent:</strong> An estimated number of hours you personally spent on activities related to the management and decision-making of your rental property.</li>\n <li><strong>Decision Records:</strong> Any available records or correspondence that showcase your involvement in key decisions (e-mails, signed documents, etc.).</li>\n <li><strong>Property Management Engagement:</strong> If you've engaged with a property manager, a description of their role versus the tasks you personally handle would be helpful.</li>\n </ol>\n <p>Your prompt response with these specifics will greatly facilitate the accurate and advantageous processing of your tax return regarding rental activities. If there are any aspects of this request that require clarification, or if assistance is needed, please don't hesitate to reach out.</p>\n <p>Thank you for your cooperation and attention to this matter.</p>",
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
actionTaxSubject: "Real Estate Professional",
|
|
254
|
+
actionTitle: "Real Estate Professional",
|
|
255
|
+
actionInstructions: "<p>Thank you for indicating that you've spent more than half of your working time in real estate activities this tax year. To properly evaluate your eligibility for tax benefits as a Real Estate Professional, we require the following documentation:</p>\n <ol>\n <li><strong>Summary of Annual Working Hours:</strong> Please provide a detailed summary of your total working hours this year, specifying the number of hours dedicated to real estate activities.</li>\n <li><strong>Proof of Real Estate Activities:</strong> Documentation such as contracts, engagement letters, or client invoices that prove your participation in real estate activities (e.g., sales, leasing, management).</li>\n <li><strong>List of Properties:</strong> A list of properties you have managed, sold, or are currently selling, including their location and the nature of your involvement.</li>\n <li><strong>Detailed Job Description:</strong> A brief outline of your role(s) in real estate activities, specifying whether your involvement is primarily as a broker, agent, property manager, etc.</li>\n <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>\n <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>\n </ol>\n <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>",
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
actionTaxSubject: "Partial Rental Property",
|
|
259
|
+
actionTitle: "Partial Rental Property",
|
|
260
|
+
actionInstructions: "<p>Thank you for letting us know that you rented out a portion of your property this tax year while using the rest for personal purposes. To accurately prepare your tax returns and ensure you receive the best tax advantages, we need the following information regarding your partial rental property:</p>\n <ol>\n <li><strong>Property Details:</strong>\n <ul>\n <li>Complete address of the property.</li>\n <li>Description of the rented portion and the personal use portion.</li>\n </ul>\n </li>\n <li><strong>Rental Agreement:</strong>\n <ul>\n <li>Copy of the rental agreement or lease.</li>\n <li>Start and end dates of the rental period within the tax year.</li>\n </ul>\n </li>\n <li><strong>Rental Income:</strong>\n <ul>\n <li>Total rental income received during the tax year.</li>\n <li>Details of any advance rent or security deposits not returned to the tenant.</li>\n </ul>\n </li>\n <li><strong>Expenses:</strong>\n <ul>\n <li>A detailed list of expenses for the rental property, including repairs, utilities, insurance, and property taxes.</li>\n <li>Information on expenses shared between the rental and personal use portions, and how they are divided.</li>\n </ul>\n </li>\n <li><strong>Use of Property:</strong>\n <ul>\n <li>Total number of days used for personal purposes.</li>\n <li>Total number of days rented at fair rental value.</li>\n </ul>\n </li>\n <li><strong>Improvements and Repairs:</strong>\n <ul>\n <li>Details of any improvements or repairs made specifically in the rental portion and the cost involved.</li>\n </ul>\n </li>\n </ol>\n <p>Please gather these details and documents at your earliest convenience. The accuracy and completeness of this information are crucial for correct tax filing and optimizing your potential deductions and tax benefits.</p>\n <p>Do not hesitate to reach out if you have any questions or need further clarification.</p>",
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
actionTaxSubject: "Personal Use Rental",
|
|
264
|
+
actionTitle: "Personal Use Rental",
|
|
265
|
+
actionInstructions: "<p>We understand that you have indicated using your rental property for personal purposes during the last tax year. To accurately report this on your tax return and ensure compliance with IRS regulations, we need the following information:</p>\n <ol>\n <li><strong>Total days used for personal purposes:</strong> Please specify the exact number of days during the tax year when the property was used by you, your family, or friends without charging rent.</li>\n <li><strong>Total days rented at fair rental price:</strong> Provide the number of days the property was actually rented out to tenants at a fair rental price.</li>\n <li><strong>Rental income received:</strong> Specify the total amount of rental income received during the tax year for this property.</li>\n <li><strong>Rental expenses:</strong> Provide a detailed list of all expenses incurred for the property, including but not limited to advertising, cleaning and maintenance, utilities, insurance, property taxes, mortgage interest, and any repairs.</li>\n <li><strong>Improvements and dates:</strong> List any improvements made to the property during the tax year, along with the date of improvement and the cost.</li>\n <li><strong>Property Tax Statement and Mortgage Interest Statement:</strong> Attach a copy of your annual property tax statement and mortgage interest statement for this property.</li>\n </ol>\n <p>Providing this information will enable us to correctly calculate the portion of expenses that can be deducted and report your income accurately. If you have any questions or need clarification on what counts as personal use versus rental use, please do not hesitate to contact us.</p> \n <p>Thank you for your prompt attention to this matter.</p>",
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
actionTaxSubject: "Partial Personal Use Rental",
|
|
269
|
+
actionTitle: "Partial Personal Use Rental",
|
|
270
|
+
actionInstructions: "<p>We understand that you have indicated renting out part of your property for profit, while also using it in a manner that may classify it as your residence. To accurately capture all information and comply with tax regulations, we require the following documents and details:</p>\n <ol>\n <li><strong>Rental Agreement/Lease:</strong> A copy of the rental agreement or lease that specifies the terms, rental period, and payment details.</li>\n <li><strong>Rental Income Records:</strong> Detailed records of all rental income received during the tax year.</li>\n <li><strong>Expense Records:</strong> Receipts and records of expenses related to the rental activity. This includes, but is not limited to, repairs, maintenance, utilities, insurance, and property management fees.</li>\n <li><strong>Personal Use Details:</strong> A log or calendar documenting the specific days the property was used for personal purposes and not rented out.</li>\n <li><strong>Property Tax and Mortgage Interest Statements:</strong> Copies of property tax statements and mortgage interest statements, if applicable.</li>\n <li><strong>Improvements and Depreciation:</strong> Records of any property improvements or depreciation schedules if previously claimed on your tax returns.</li>\n </ol>\n <p>It is crucial that we have all the necessary documents to ensure your tax filings are accurate and complete. Please provide these documents at your earliest convenience or contact us directly if you have any questions or concerns.</p>\n <p>Thank you for your cooperation.</p>",
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
actionTaxSubject: "Royalty Income",
|
|
274
|
+
actionTitle: "Royalty Income",
|
|
275
|
+
actionInstructions: "<p>We understand you've indicated receiving payments that could be considered royalty income this past year. To ensure accurate and efficient tax preparation, we require the following documents and information:</p>\n <ol>\n <li><strong>All Forms 1099-MISC:</strong> Please provide copies of any 1099-MISC forms received for royalty payments. Include those from traditional sources like patents, copyrights, and mineral rights, as well as any from digital content platforms such as Udemy, YouTube, etc.</li>\n <li><strong>Detailed Statement of Earnings:</strong> If you receive royalty income from sources that do not provide a 1099-MISC, or in addition to those that do, we need a detailed statement or log of these earnings. This should include dates, amounts, and sources.</li>\n <li><strong>Expense Documentation:</strong> Any expenses associated with the generation of this royalty income, including but not limited to marketing, production, and legal expenses. Please provide receipts, invoices, or a detailed expense log.</li>\n <li><strong>Digital Content Platform Reports:</strong> If applicable, provide any year-end summary reports or income statements provided by digital platforms where your content is hosted.</li>\n <li><strong>Any Withholding Notices:</strong> If tax was withheld from any of your royalty payments, please provide documentation or notices indicating the amount withheld.</li>\n </ol>\n <p>Your prompt response with these documents and pieces of information will help us ensure that your tax preparation is both accurate and maximized for your benefit. If you have any questions or need assistance in gathering these items, please do not hesitate to contact us.</p>\n <p>Thank you for your cooperation.</p>",
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
actionTaxSubject: "Hotel Motel Bed Breakfast",
|
|
279
|
+
actionTitle: "Hotel Motel Bed Breakfast",
|
|
280
|
+
actionInstructions: "<p>As part of our ongoing efforts to accurately complete your tax preparation, we've noted that you answered <strong>yes</strong> to owning rental properties that operate as a Hotel, Motel, Bed and Breakfast, or offer short-term accommodations similar to Airbnb. To ensure we can provide you with the best service and comply with tax regulations, we kindly request the following information:</p>\n <ol>\n <li><strong>Property Details:</strong> Please provide the address and a brief description of each property you rent out on a short-term basis.</li>\n <li><strong>Income Records:</strong> Detailed records of all income received from these properties, including but not limited to rental income, cleaning fees, and any other charges to renters.</li>\n <li><strong>Expense Records:</strong> Comprehensive list of all expenses related to each rental activity. This includes mortgage interest, property taxes, insurance, repairs and maintenance, utilities, management fees, and advertising costs.</li>\n <li><strong>Occupancy Information:</strong> Number of days each property was rented out during the year, as well as the number of days it was used for personal purposes, if applicable.</li>\n <li><strong>Legal Documentation:</strong> Copies of any local licenses, permits, or registrations required for operating these rental properties.</li>\n </ol>\n <p>This list is not exhaustive, and additional information may be requested during the tax preparation process. Please gather these documents at your earliest convenience and reply to this email or upload them directly through our secure client portal. Your prompt cooperation is greatly appreciated and essential for the accurate and timely completion of your tax return.</p>\n <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>\n <p>Thank you for choosing our services.</p>",
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
actionTaxSubject: "Taxable Recovery",
|
|
284
|
+
actionTitle: "Taxable Recovery",
|
|
285
|
+
actionInstructions: "\n <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>\n<ol>\n <li><b>Amount of Taxable Recovery:</b> The total sum of all payments or refunds received that are classified as taxable recovery.</li>\n <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>\n <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>\n <li><b>Date Received:</b> The specific dates when these payments or refunds were received.</li>\n <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>\n</ol>\n<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>\n<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>",
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
actionTaxSubject: "Taxable Alimony",
|
|
289
|
+
actionTitle: "Taxable Alimony",
|
|
290
|
+
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>\n <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>\n <p>Please provide the following information and documents to ensure we accurately account for these payments:</p>\n <ol>\n <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>\n <li><strong>Amount of alimony received this tax year:</strong> Total annual amount received in alimony payments.</li>\n <li><strong>Documentation confirming alimony payments:</strong> Bank statements, transfer receipts, or any legal documents showing the amount of alimony received.</li>\n <li><strong>Payer\u2019s information:</strong> Full name and Social Security Number (SSN) of the person from whom you have received the alimony payments.</li>\n </ol>\n <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>\n <p>Thank you for your prompt attention to this request.</p>",
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
actionTaxSubject: "Government Benefits",
|
|
294
|
+
actionTitle: "Government Benefits",
|
|
295
|
+
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>\n <ol>\n <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>\n <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>\n <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>\n <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>\n </ol>\n <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>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
actionTaxSubject: "Social Security Income",
|
|
299
|
+
actionTitle: "Social Security Income",
|
|
300
|
+
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>\n <ol>\n <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>\n <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>\n <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>\n </ol>\n <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>\n <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>",
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
actionTaxSubject: "Gambling Winnings",
|
|
304
|
+
actionTitle: "Gambling Winnings",
|
|
305
|
+
actionInstructions: "\n <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>\n<p>Please provide the following details:</p>\n<ol>\n <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>\n <li><strong>Dates of Winnings:</strong> The specific dates on which you had gambling winnings.</li>\n <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>\n <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>\n <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>\n <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>\n</ol>\n<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>\n<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>",
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
actionTaxSubject: "Cancellation of Debt Income",
|
|
309
|
+
actionTitle: "Cancellation of Debt Income",
|
|
310
|
+
actionInstructions: "\n <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>\n<ol>\n<li><strong>Form 1099-C</strong>: Copies of any Form 1099-C you received related to the cancellation of debt.</li>\n<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:\n <ul>\n <li>The name of the creditor</li>\n <li>The original amount of the debt</li>\n <li>The amount canceled</li>\n <li>The date of cancellation</li>\n </ul>\n</li>\n<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>\n<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>\n</ol>\n<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>\n<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>",
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
actionTaxSubject: "Primary Residence Debt Cancellation",
|
|
314
|
+
actionTitle: "Primary Residence Debt Cancellation",
|
|
315
|
+
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>\n <ol>\n <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>\n <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>\n <li><b>Mortgage statements:</b> Please provide mortgage statements before and after the debt cancellation to show the change in your mortgage balance.</li>\n <li><b>Documentation related to the property:</b> This includes:\n <ul>\n <li>Your mortgage contract.</li>\n <li>Any documents related to foreclosure, if applicable.</li>\n <li>Documentation of a short sale, if applicable.</li>\n </ul>\n </li>\n <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>\n </ol>\n <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>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
actionTaxSubject: "Student Loan Debt Cancellation",
|
|
319
|
+
actionTitle: "Student Loan Debt Cancellation",
|
|
320
|
+
actionInstructions: "\n <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>\n<ol>\n <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>\n <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>\n <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>\n <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>\n <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>\n</ol>\n<p>Please ensure that all documents provided are complete and legible. You can upload the documents securely through our client portal.</p>\n<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>\n<p>Thank you for your cooperation and trust in our services.</p>",
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
actionTaxSubject: "Hobby Income",
|
|
324
|
+
actionTitle: "Hobby Income",
|
|
325
|
+
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>\n <ol>\n <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>\n <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>\n <li><strong>Bank Statements:</strong> Copies of bank statements that show the transactions related to your hobby income and expenses.</li>\n <li><strong>Proof of Prizes:</strong> If your hobby income includes prizes, please provide documentation or receipts that detail these awards.</li>\n <li><strong>Other Relevant Documents:</strong> Any other documentation that can support the income and expenses reported for your hobby activities.</li>\n </ol>\n <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>",
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
actionTaxSubject: "Certain Court Awards",
|
|
329
|
+
actionTitle: "Certain Court Awards",
|
|
330
|
+
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>\n <p>Please provide the following details:</p>\n <ol>\n <li><strong>Type of Award or Settlement:</strong> Specify the nature (e.g., lost wages, punitive damages, etc.).</li>\n <li><strong>Amount Received:</strong> The total amount awarded or settled, before any deductions.</li>\n <li><strong>Date Received:</strong> The exact date when you received the compensation.</li>\n <li><strong>Documentation:</strong> Any official documents or judgments pertaining to the award or settlement. This includes court orders, agreement letters, and receipts.</li>\n <li><strong>Tax Withheld:</strong> If applicable, the amount of federal or state tax already withheld from the settlement.</li>\n </ol>\n <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> \n <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>\n <p>We appreciate your prompt attention to this request and are here to help you through every step of your tax preparation process.</p>",
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
actionTaxSubject: "Prizes and Awards",
|
|
334
|
+
actionTitle: "Prizes and Awards",
|
|
335
|
+
actionInstructions: "\n <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>\n <p>Please provide the following information at your earliest convenience:</p>\n <ol>\n <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>\n <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>\n <li><strong>Date of Receipt:</strong> Specify the date on which each prize or award was received.</li>\n <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>\n <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>\n </ol>\n <p>It's crucial for tax purposes that we report these accurately to avoid any potential issues with the IRS.</p>\n <p>We appreciate your prompt attention to this matter and are here to assist you through this process.</p>",
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
actionTaxSubject: "Taxable Coverdell Distributions",
|
|
339
|
+
actionTitle: "Taxable Coverdell Distributions",
|
|
340
|
+
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>\n <ol>\n <li>The total amount withdrawn from the Coverdell ESA or Education IRA.</li>\n <li>Detailed breakdown of how these funds were utilized, specifically:\n <ul>\n <li>Amount used for tuition and fees.</li>\n <li>Amount spent on books, supplies, and equipment required for enrollment or attendance.</li>\n <li>Any amounts spent on room and board, specifying if the beneficiary was enrolled at least half-time.</li>\n <li>Any additional qualified education expenses paid using these funds.</li>\n </ul>\n </li>\n <li>Proof of the beneficiary's enrollment status (e.g., tuition statement, enrollment verification).</li>\n <li>The name and address of the educational institution(s) involved.</li>\n <li>Any Form 1099-Q received pertaining to these distributions.</li>\n </ol>\n <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>",
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
actionTaxSubject: "Taxable QTP Distributions",
|
|
344
|
+
actionTitle: "Taxable QTP Distributions",
|
|
345
|
+
actionInstructions: "\n <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>\n<ol>\n <li><strong>Account Information:</strong> The name of the account holder and the beneficiary for each 529 plan distribution.</li>\n <li><strong>Distribution Statements:</strong> Copies of all 1099-Q forms received for each distribution this tax year.</li>\n <li><strong>Total Amount of Distributions:</strong> The total amount of money distributed from the QTP during the tax year.</li>\n <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>\n <li><strong>Expense Receipts:</strong> Receipts or statements that provide proof of the educational expenses.</li>\n <li><strong>Institution Information:</strong> Name and address of the educational institution(s) where the expenses were incurred.</li>\n <li><strong>Recipient's Information:</strong> For whom the expenses were incurred (the beneficiary of the 529 plan) and their Social Security Number.</li>\n</ol>\n<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>\n<p>Thank you for your cooperation and prompt attention to this matter.</p>",
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
actionTaxSubject: "Strike Benefits",
|
|
349
|
+
actionTitle: "Strike Benefits",
|
|
350
|
+
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>\n <ol>\n <li><strong>Total Amount of Strike Benefits Received:</strong> Please provide the total sum of strike benefits received during the tax year.</li>\n <li><strong>Source of Strike Benefits:</strong> Indicate whether these benefits were paid by your union, an insurance policy, or another source.</li>\n <li><strong>Documentation of Strike Benefits:</strong> Provide any forms, statements, or other documentation that show the receipt of these benefits.</li>\n <li><strong>Dates of Strike Participation:</strong> List the dates or duration of your participation in the labor strike.</li>\n <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>\n </ol>\n <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>\n <p>If you have any questions or need further clarification, do not hesitate to contact us. We're here to help!</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
actionTaxSubject: "Jury Duty Pay",
|
|
354
|
+
actionTitle: "Jury Duty Pay",
|
|
355
|
+
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>\n <ol>\n <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>\n <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>\n <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>\n <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>\n <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>\n </ol>\n <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>",
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
actionTaxSubject: "Alaska Permanent Funds Dividends",
|
|
359
|
+
actionTitle: "Alaska Permanent Funds Dividends",
|
|
360
|
+
actionInstructions: "\n <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>\n <ol>\n <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>\n <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>\n <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>\n <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>\n </ol>\n <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>",
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
actionTaxSubject: "Executor Fees",
|
|
364
|
+
actionTitle: "Executor Fees",
|
|
365
|
+
actionInstructions: "\n <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>\n<ol>\n <li>A detailed statement of the executor fees paid or received, including dates and amounts.</li>\n <li>If you received executor fees, please provide your role (e.g., primary executor, co-executor) and the estate's name.</li>\n <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>\n <li>Any documentation that outlines the agreement or court order regarding the executor fee.</li>\n <li>Copies of bank statements or cancelled checks evidencing the payment or receipt of these fees.</li>\n <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>\n</ol>\n<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>\n<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>",
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
actionTaxSubject: "Event Gratuities and Gifts",
|
|
369
|
+
actionTitle: "Event Gratuities and Gifts",
|
|
370
|
+
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>\n <p>Please provide the following information and documents:</p>\n <ol>\n <li>A detailed list of each event hosted, including:\n <ul>\n <li>Date of the event.</li>\n <li>Location of the event.</li>\n <li>Approximate number of attendees.</li>\n <li>Purpose of the event (e.g., sales promotion, customer appreciation).</li>\n </ul>\n </li>\n <li>Documentation for each gift, gratuity, or form of compensation received, such as:\n <ul>\n <li>Description of the gift or gratuity.</li>\n <li>Estimated fair market value at the time received.</li>\n <li>Name and contact information of the individual or entity providing the gift or gratuity.</li>\n <li>Any documentation or communication regarding the receipt of these items (e.g., thank you letters, emails confirming receipt).</li>\n </ul>\n </li>\n <li>Any receipts or documentation related to expenses incurred while hosting these events (e.g., catering, venue rental, entertainment).</li>\n </ol>\n <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>\n <p>If you have any questions or need further clarification, please do not hesitate to contact us.</p>",
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
actionTaxSubject: "Qualified Educator Expenses",
|
|
374
|
+
actionTitle: "Qualified Educator Expenses",
|
|
375
|
+
actionInstructions: "<p>As part of our comprehensive approach to your tax preparation for the current year, you have indicated that you've incurred out-of-pocket expenses as a qualified educator for classroom materials or supplies. To accurately claim these deductions and ensure you receive the maximum benefit, we require the following specific information:</p>\n <ol>\n <li><b>Detailed List of Expenses:</b> A breakdown of all classroom materials or supplies purchased, including books, supplies, computer equipment (hardware, software, and services), and any other relevant materials.</li>\n <li><b>Receipts and Proof of Payment:</b> Copies of receipts or bank/credit card statements for each purchase made. Please ensure that the date of purchase and the item or service purchased are clearly visible.</li>\n <li><b>Date of Purchases:</b> The specific dates each item was purchased during the tax year.</li>\n <li><b>Usage Documentation:</b> A brief description of how each item purchased was used in the classroom setting.</li>\n <li><b>Total Amount:</b> The total dollar amount spent on these materials and supplies over the course of the tax year.</li>\n </ol>\n <p>Understanding that your time is valuable, we appreciate your effort in compiling this information promptly. These details are crucial for optimizing your tax returns and ensuring you are compensated for your investment in educational materials.</p>\n <p>Please provide the requested information as soon as possible to ensure we can proceed without delay. You can send the documents to us either via email at tax@lendahandaccounting.com or upload them directly through our secure client portal.</p>\n <p>If you have any questions or need further clarification, do not hesitate to contact us. We're here to assist you through every step of the process.</p>\n <p>Thank you for your attention to this matter and your dedication as an educator.</p>",
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
actionTaxSubject: "Armed Forces Reservist Expenses",
|
|
379
|
+
actionTitle: "Armed Forces Reservist Expenses",
|
|
380
|
+
actionInstructions: "<p>We are in the process of preparing your tax documents and have identified that you incurred unreimbursed travel expenses as an Armed Forces Reservist. To ensure accurate and beneficial tax filing, we require the following specific information and documents from you:</p>\n <ol>\n <li><strong>Summary of Travel Dates:</strong> Please provide a list of all dates you traveled more than 100 miles away from home to perform your reserve duties.</li>\n <li><strong>Travel Expenses Documentation:</strong> For each of the travel dates listed, provide receipts, or other documentation for:\n <ul>\n <li>Transportation (e.g., gas receipts, mileage logs, airplane tickets, etc.)</li>\n <li>Lodging (only if an overnight stay was required)</li>\n <li>Meals and Incidental Expenses (details on each, if not opting for the standard meal allowance)</li>\n </ul>\n </li>\n <li><strong>Proof of Reserve Status:</strong> A copy of your orders or any documentation confirming your participation and duties as an Armed Forces Reservist during the tax year in question.</li>\n <li><strong>Statement of Reimbursement:</strong> A detailed account of any reimbursements received for the travel expenses claimed.</li>\n </ol>\n <p>Please ensure that all provided documents are legible and clearly labeled. Provide these documents as soon as possible to allow sufficient time for processing and inclusion in your tax filing.</p>\n <p>If you have any questions or require assistance gathering these documents, do not hesitate to contact us. Our team is here to support you through this process.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
actionTaxSubject: "Performing Artist Expenses",
|
|
384
|
+
actionTitle: "Performing Artist Expenses",
|
|
385
|
+
actionInstructions: "<p>We're reaching out to gather necessary documents and information to accurately account for your expenses as a performing artist. The following list details the specific job-related expenses that we require. Kindly review and provide the relevant documentation as soon as possible to ensure a thorough and timely preparation of your tax return.</p>\n <ol>\n <li><strong>Audition Expenses:</strong> Receipts or bank/credit card statements showing payments for auditions, including any application or entry fees.</li>\n <li><strong>Travel Expenses:</strong> Documentation for travel costs related to performances. This includes airfare, lodging, car rentals, and gasoline receipts. Please indicate the dates and purpose of each trip.</li>\n <li><strong>Costume Expenses:</strong> Receipts for any costumes or specialized clothing required for your performances that are not suitable for everyday wear.</li>\n <li><strong>Makeup/Hair Expenses:</strong> Specific to performances, including costs for products and professional services.</li>\n <li><strong>Training and Professional Development:</strong> Costs related to classes, workshops, or seminars aimed at improving your performance skills.</li>\n <li><strong>Agent and Management Fees:</strong> Contracts or statements detailing payments to agents or managers.</li>\n <li><strong>Miscellaneous Performance-Related Expenses:</strong> Receipts for any other expenses directly related to your work as a performing artist, such as equipment, music or script purchases, and maintenance costs for instruments or performance gear.</li>\n </ol>\n <p>Please ensure that all provided documents clearly indicate the date, amount, and nature of each expense. If you're unsure whether an expense qualifies, include it with a brief note explaining its purpose. We're here to help you maximize your deductions while ensuring compliance with tax laws.</p>\n <p>Thank you for your prompt attention to this matter. Should you have any questions or need further clarification, feel free to contact us.</p>",
|
|
386
|
+
},
|
|
387
|
+
{
|
|
388
|
+
actionTaxSubject: "Fee Based Government Official Expenses",
|
|
389
|
+
actionTitle: "Fee Based Government Official Expenses",
|
|
390
|
+
actionInstructions: "<p>We are processing your tax returns and noted that you worked as a <strong>fee-based government official</strong> during the tax year. As part of this role, you've reported incurring unreimbursed expenses related to your official duties. To ensure accurate and maximum deductions on your tax filings, we require the following documents and information:</p>\n <ol>\n <li><strong>Detailed Expense Reports:</strong> Please provide a comprehensive list of all expenses. Each entry should include the date, amount, and a brief description of the nature of the expense.</li>\n <li><strong>Proof of Payment:</strong> Receipts, bank statements, or credit card statements evidencing the payment of the reported expenses.</li>\n <li><strong>Official Schedule or Duty Roster:</strong> Documentation that correlates your reported expenses with your official duties on specific dates.</li>\n <li><strong>Mileage Log:</strong> If any expenses are for travel, a detailed mileage log showing dates, destination, purpose of the trip, and miles traveled. Ensure to differentiate between personal and official travel.</li>\n <li><strong>Communication with Government Agency:</strong> Any correspondence with the government agency confirming that these expenses were not reimbursed.</li>\n </ol>\n <p>Please ensure that the documentation provided is legible and organized chronologically. This will greatly assist in the speedy processing of your tax filings and in maximizing your eligible deductions.</p>\n <p>If you have any questions or need further assistance in gathering these documents, please feel free to reach out. We\u2019re here to help every step of the way!</p>",
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
actionTaxSubject: "HSA Deduction Expenses",
|
|
394
|
+
actionTitle: "HSA Deduction Expenses",
|
|
395
|
+
actionInstructions: "<p>Thank you for confirming your Health Savings Account (HSA) contributions during the tax year. To accurately calculate your HSA deduction and ensure we maximize your tax benefits, we require the following detailed information:</p>\n <ol>\n <li>Total amount contributed to the HSA during the tax year.</li>\n <li>Any contributions made by your employer to the HSA (if applicable).</li>\n <li>Dates of contributions, if they were not made in a lump sum.</li>\n <li>Proof of HSA eligibility for the tax year (typically, this involves proof of a High Deductible Health Plan).</li>\n <li>Statements from your HSA provider detailing distributions, if any were made.</li>\n <li>A detailed list of medical expenses paid out of the HSA, if any.</li>\n </ol>\n <p>This information is crucial for both the accurate filing of your taxes and to ensure compliance with IRS regulations regarding HSAs. Please respond with these documents and details at your earliest convenience. Should you have any questions or require clarification on what is needed, do not hesitate to reach out.</p>\n <p>Thank you for your cooperation.</p>",
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
actionTaxSubject: "Armed Forces Moving Expenses",
|
|
399
|
+
actionTitle: "Armed Forces Moving Expenses",
|
|
400
|
+
actionInstructions: "<p>As part of preparing your tax return for the current tax year, you indicated that you have incurred moving expenses related to a permanent change of station as a member of the Armed Forces. To ensure the accuracy of your tax return and to potentially qualify for related deductions or exclusions, we require the following documentation:</p>\n <ol>\n <li><b>Orders for Permanent Change of Station:</b> A copy of the official orders that initiated the move. This should detail the move is due to military orders and indicate both your previous and new duty stations.</li>\n <li><b>Receipts and Records of Moving Expenses:</b> Detailed receipts or records of all moving-related expenses. This includes, but is not limited to:\n <ul>\n <li>Transportation costs (e.g., costs associated with moving household goods and personal effects)</li>\n <li>Travel expenses to the new home (e.g., lodging costs en route, but not meals)</li>\n <li>Storage expenses for household goods and personal effects, if applicable</li>\n </ul>\n </li>\n <li><b>Lease Termination Documentation:</b> If applicable, documentation showing any costs associated with breaking a lease due to the move.</li>\n <li><b>Proof of New Residence:</b> A document indicating the address of your new permanent residence. This can include a utility bill, new lease agreement, or homeowner's insurance documents.</li>\n </ol>\n <p>Please note, to take advantage of any exclusions or deductions related to Armed Forces moving expenses, these documents are necessary to verify the expenses incurred. We understand the sensitive nature of these documents and assure you that all information provided will be kept confidential and used exclusively for the preparation of your tax return.</p>\n <p>We appreciate your cooperation and prompt response in providing these documents to us. Should you have any questions or require assistance, please do not hesitate to contact us.</p>",
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
actionTaxSubject: "Deductible Self Employment Part Taxes",
|
|
404
|
+
actionTitle: "Deductible Self Employment Part Taxes",
|
|
405
|
+
actionInstructions: "<p>As part of our ongoing efforts to maximize your deductions and ensure the accuracy of your tax filings, we've identified a potential adjustment for half of your self-employment tax. This involves the deduction of half of the self-employment tax you've paid for the current year, which contributes towards your Social Security and Medicare.</p>\n <p>To proceed with this, we kindly request the following information:</p>\n <ol>\n <li><strong>Self-Employment Tax Calculation:</strong> A detailed calculation of your self-employment tax for the current tax year. This may include a summary of your net earnings from self-employment.</li>\n <li><strong>Total Self-Employment Tax Paid:</strong> Official receipts or documents showing the total amount of self-employment tax paid for the year.</li>\n <li><strong>Identification of Payments:</strong> Documentation or ledgers indicating payments made towards Social Security and Medicare through self-employment tax.</li>\n </ol>\n <p>This documentation is crucial for accurately reporting your taxes and ensuring you receive all entitled deductions. Please provide these documents at your earliest convenience.</p>\n <p>If you have any questions or need assistance in gathering this information, please do not hesitate to contact us. Our team is here to support you through every step of the process.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
actionTaxSubject: "Self Employed SEP IRA Contribution",
|
|
409
|
+
actionTitle: "Self Employed SEP IRA Contribution",
|
|
410
|
+
actionInstructions: "\n <p>We are in the process of preparing your tax return and have noted that you've indicated making contributions to a SEP-IRA (Simplified Employee Pension Individual Retirement Account) this tax year as a self-employed individual. For accurate reporting and to maximize your potential tax benefits, we kindly request the following documents and information:</p>\n <ol>\n <li><strong>SEP-IRA Contribution Statements:</strong> Please provide all statements or receipts showing the contributions made to your SEP-IRA during the tax year.</li>\n <li><strong>Proof of Self-Employed Income:</strong> As your SEP-IRA contribution limits are directly related to your self-employed income, please ensure we have all relevant income documentation. This may include, but is not limited to, 1099 forms, profit and loss statements, and business bank statements.</li>\n <li><strong>Schedule C (Form 1040) or Equivalent:</strong> If you have not already done so, please provide a completed Schedule C or equivalent documentation that details your business earnings and expenses. This will help in accurately calculating your maximum deductible contribution.</li>\n <li><strong>Any Prior Year Contribution Details:</strong> If you have made contributions in prior years but haven\u2019t shared those details with us, please do so. This can affect your current year\u2019s contributions and deductions.</li>\n </ol>\n <p>Correctly reporting your SEP-IRA contributions is crucial for ensuring that you receive the appropriate tax deductions and comply with IRS rules and regulations. Should you have any questions or need assistance gathering these documents, please don't hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter. We look forward to completing your tax preparation efficiently and accurately.</p>",
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
actionTaxSubject: "Self Employed SIMPLE Plan Contribution",
|
|
414
|
+
actionTitle: "Self Employed SIMPLE Plan Contribution",
|
|
415
|
+
actionInstructions: " <p>We're in the process of preparing your taxes and noted that you have contributed to a SIMPLE IRA plan as a self-employed individual this tax year. To accurately reflect these contributions in your tax filing, we require some additional information. </p>\n <p>Please provide the following documents and information at your earliest convenience:</p>\n <ol>\n <li><strong>Total amount contributed to the SIMPLE IRA this tax year:</strong> Please specify the total sum of your contributions.</li>\n <li><strong>Contribution dates:</strong> List the dates on which you made these contributions to the SIMPLE IRA.</li>\n <li><strong>Proof of contributions:</strong> This can include bank statements or transaction histories showing the contributions to your SIMPLE IRA account.</li>\n <li><strong>IRS Form 1040 Schedule C:</strong> As a self-employed individual, your tax return should include a Schedule C showing your business income and expenses. This is necessary for determining your net earnings and the contribution limits for your SIMPLE IRA.</li>\n <li><strong>Employer Identification Number (EIN) of the SIMPLE IRA plan:</strong> If applicable, provide the EIN for your SIMPLE IRA. This is not required if you are the sole contributor and do not have an EIN separate from your Social Security Number.</li>\n </ol>\n <p>This information is crucial for ensuring compliance with tax laws and accurately reporting your retirement contributions. Your promptness in providing these details will help avoid delays in your tax preparation process.</p>\n <p>If you have any questions or need assistance gathering these documents, please don't hesitate to contact us. We're here to help!</p>",
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
actionTaxSubject: "Self Employed Qualified Plan Contribution",
|
|
419
|
+
actionTitle: "Self Employed Qualified Plan Contribution",
|
|
420
|
+
actionInstructions: "<p>We are in the process of preparing your tax returns and need additional details regarding your self-employed qualified plan contributions. Your response to our question about making contributions to a qualified retirement plan during this tax year necessitates further information to accurately compute potential tax benefits or obligations.</p>\n <p>Please provide the following information at your earliest convenience:</p>\n <ol>\n <li><b>Confirmation of Contribution Type:</b> Clarify the type of qualified retirement plan you contributed to (e.g., Solo 401(k), SEP IRA, SIMPLE IRA).</li>\n <li><b>Total Amount Contributed:</b> Specify the total dollar amount contributed to the plan during the tax year.</li>\n <li><b>Contribution Dates:</b> List the dates on which contributions were made.</li>\n <li><b>Plan Administrator:</b> Provide the name and contact information of the plan's administrator, if applicable.</li>\n <li><b>Proof of Contributions:</b> Forward any receipts, statements, or other documents that can verify the contributions you made.</li>\n </ol>\n <p>This information is crucial for ensuring that you receive the proper tax treatment for these contributions. Failure to accurately report retirement plan contributions can result in discrepancies with the IRS and potentially affect your tax liability or refund.</p>\n <p>If you have questions or require assistance in gathering this information, please do not hesitate to contact us. Your prompt attention to this request will help us to more efficiently complete your tax preparation services. Thank you for your cooperation and trust in our services.</p>",
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
actionTaxSubject: "Self Employed Health Insurance Deduction",
|
|
424
|
+
actionTitle: "Self Employed Health Insurance Deduction",
|
|
425
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and noticed you indicated paying for health insurance premiums as a self-employed individual. To ensure you receive the appropriate deductions for your health insurance costs, please provide the following information:</p>\n <ol>\n <li>A detailed list of <strong>all health insurance premiums</strong> paid during the tax year, including medical, dental, and long-term care insurance. This should cover:\n <ul>\n <li>Amounts paid for yourself</li>\n <li>Amounts paid for your spouse</li>\n <li>Amounts paid for your dependents</li>\n </ul>\n </li>\n <li>Proof of payment for these premiums, such as:\n <ul>\n <li>Bank statements</li>\n <li>Insurance payment receipts</li>\n <li>Cancelled checks</li>\n </ul>\n </li>\n <li>Documentation confirming the insurance coverage, including:\n <ul>\n <li>Insurance policy statements</li>\n <li>Coverage summaries</li>\n </ul>\n </li>\n <li>Confirmation that the insurance plan is established under your business (for self-employed individuals).</li>\n </ol>\n <p>This information is vital for accurately calculating your deductible health insurance premiums and ensuring compliance with IRS rules and regulations. Please send the documents as soon as possible to ensure your tax return is completed in a timely manner.</p>\n <p>If you have any questions or need clarification on what is required, please do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
actionTaxSubject: "Early Savings Withdrawal Penalty",
|
|
429
|
+
actionTitle: "Early Savings Withdrawal Penalty",
|
|
430
|
+
actionInstructions: "<p>We have noted your response indicating that you incurred penalties due to early withdrawals from savings accounts during this tax year. To assist you efficiently and ensure accurate tax filing, we kindly ask you to provide the following information:</p>\n <ol>\n <li><strong>The total amount of penalties</strong> incurred from early withdrawals. This includes penalties from certificates of deposit or other time-based savings accounts.</li>\n <li><strong>Detailed statements</strong> from your financial institution for each instance of early withdrawal. These statements should include:\n <ul>\n <li>The date of withdrawal</li>\n <li>The amount withdrawn early</li>\n <li>The penalty charged</li>\n </ul>\n </li>\n <li><strong>The purpose of each withdrawal</strong>, if available. Certain situations may provide exceptions to penalties on your tax return.</li>\n <li>Any <strong>correspondence or documentation</strong> from the financial institution regarding these penalties.</li>\n </ol>\n <p>This detailed information is crucial to accurately assess possible impacts on your tax filing and explore any opportunities to minimize your tax liability.</p>\n <p>Please provide this information at your earliest convenience. If you have any questions or need assistance gathering these details, feel free to contact us directly.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
actionTaxSubject: "Alimony Paid",
|
|
434
|
+
actionTitle: "Alimony Paid",
|
|
435
|
+
actionInstructions: "<p>Thank you for providing information regarding your financial activities over the past tax year. As you indicated that you have made alimony payments under a divorce or separation agreement, we require some additional documents and information to accurately prepare your tax return. The documentation is essential for ensuring compliance with tax regulations and potentially identifying allowable deductions related to these payments.</p> \n <p><strong>Please provide the following details related to your alimony payments:</strong></p>\n <ol>\n <li>Copy of your signed divorce or separation agreement that states the amount of alimony to be paid and the timelines. Please ensure this document highlights the sections relevant to alimony obligations.</li>\n <li>Detailed record of all alimony payments made during the tax year, including:\n <ul>\n <li>Date of each payment</li>\n <li>Amount of each payment</li>\n <li>Method of payment (e.g., check, bank transfer)</li>\n <li>Name and contact information of the recipient</li>\n </ul>\n </li>\n <li>Bank statements or cancelled checks as proof of the alimony payments made.</li>\n <li>If applicable, any documentation or correspondence that indicates modifications to the original agreement affecting alimony payments during the tax year.</li>\n </ol>\n <p>This documentation will help ensure that your tax return reflects all relevant financial activities and assists in accurately determining any tax liabilities or deductions. Your prompt response with these details will be greatly appreciated and will expedite the completion of your tax preparations.</p>\n <p>Please do not hesitate to contact us if you have any questions or if you need further guidance on gathering these documents. We are here to assist you through every step of this process.</p>",
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
actionTaxSubject: "Traditional IRA Deduction",
|
|
439
|
+
actionTitle: "Traditional IRA Deduction",
|
|
440
|
+
actionInstructions: "<p>We are in the process of preparing your tax return. It has come to our attention that during this tax year, you have contributed to a Traditional IRA (Individual Retirement Account). To accurately capture this in your tax filing and ensure you receive the appropriate deduction, we will need the following information:</p>\n <ol>\n <li>The total amount contributed to the Traditional IRA during the tax year.</li>\n <li>Proof of contribution to the Traditional IRA (such as statements or receipts).</li>\n <li>Your year-end IRA statement.</li>\n <li>Details of any previous non-deductible contributions to your IRA (if applicable).</li>\n <li>Information on any withdrawals or distributions taken during the year.</li>\n <li>Your filing status and any information on a spouse's IRA contributions if you are married.</li>\n <li>Details of your earned income for the tax year.</li>\n </ol>\n <p>Please provide this information at your earliest convenience to ensure that we can accurately represent your IRA contributions and optimize your deductions.</p>",
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
actionTaxSubject: "Student Loan Interest Deduction",
|
|
444
|
+
actionTitle: "Student Loan Interest Deduction",
|
|
445
|
+
actionInstructions: "<p>Thank you for your recent confirmation regarding the payment of student loan interest during this tax year. To accurately process this segment of your tax return and ensure you benefit from any potential Student Loan Interest Deduction, we need you to provide the following information:</p>\n <ol>\n <li><strong>Form 1098-E:</strong> This is a Student Loan Interest Statement issued by your loan servicer. If you've paid $600 or more in interest, you should automatically receive it. Please scan and send it to us.</li>\n <li><strong>Loan Statements:</strong> If you did not receive a Form 1098-E or paid less than $600 in interest, please provide detailed loan statements indicating the interest paid over the tax year.</li>\n <li><strong>Borrower's Information:</strong> Confirm the Social Security Numbers and full names of any individuals for whom the loan interest was paid, including yourself, your spouse, or dependents.</li>\n <li><strong>Payments on Someone Else's Behalf:</strong> If you're not legally obligated to make interest payments on the loan but have done so anyway, please provide documentation or statements reflecting this payment.</li>\n </ol>\n <p>This deduction can provide significant tax advantages, and we're here to help you maximize your benefits. Please provide the requested information as soon as possible to ensure timely processing of your tax return.</p>\n <p>If you have any questions or need assistance gathering these documents, don't hesitate to contact us. Your proactive cooperation is greatly appreciated as we strive to serve you better.</p>",
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
actionTaxSubject: "Archer MSA Deduction",
|
|
449
|
+
actionTitle: "Archer MSA Deduction",
|
|
450
|
+
actionInstructions: "<p>We noted your response indicating contributions to an Archer Medical Savings Account (MSA) within this tax year, under a high-deductible health plan. To accurately account for these contributions in your tax return, and to maximize your potential deductions, we kindly request the following specifics:</p>\n <ol>\n <li><strong>Form 5498-SA:</strong> Please provide a copy of Form 5498-SA, if received, which shows the amount contributed to the Archer MSA this tax year.</li>\n <li><strong>Bank or Financial Statements:</strong> If you haven't received Form 5498-SA, bank or financial institution statements showing your contributions to the MSA are required. Ensure these clearly highlight the contribution amounts and dates.</li>\n <li><strong>Proof of High-Deductible Health Plan:</strong> Documentation that evidences you are covered under a high-deductible health plan. This could include insurance statements or policy documents.</li>\n <li><strong>Personal and Account Information:</strong> Confirm the account holder's full name and Social Security Number, alongside the Archer MSA account number.</li>\n </ol>\n <p>To facilitate a smooth deduction process and adhere to IRS guidelines, kindly submit the outlined documents as soon as possible</strong>. Early submission is greatly appreciated to ensure we can provide you with the best tax preparation service.</p>\n <p>Your prompt response to these requirements will directly impact the efficiency and accuracy of your tax return processing. Should you require assistance or have questions regarding the documentation, please feel free to reach out.</p>",
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
actionTaxSubject: "Other Write-In Adjustments",
|
|
454
|
+
actionTitle: "Other Write-In Adjustments",
|
|
455
|
+
actionInstructions: "<p>Thank you for indicating that there are additional expenses or adjustments that could impact your taxable income for the current tax year. To ensure we fully leverage all possible deductions and accurately prepare your tax returns, we kindly request that you provide detailed information pertaining to these items.</p>\n <p>Please provide the following details for each specified deduction or adjustment:</p>\n <ol>\n <li><strong>Description of the Expense or Adjustment:</strong> A brief description of each item you believe should be considered.</li>\n <li><strong>Amount:</strong> The total amount paid or incurred for each of these expenses or adjustments.</li>\n <li><strong>Documentation:</strong> Copies of receipts, invoices, legal documents, or other supporting evidence that validate the expense or adjustment. This documentation is essential for accurate reporting and compliance with IRS requirements.</li>\n <li><strong>Date of Payment or Incurrence:</strong> The date(s) on which the expense was paid or the adjustment occurred. This is critical to determine the tax year in which the deduction or adjustment applies.</li>\n <li><strong>Additional Explanation:</strong> Any other relevant information that could help us understand how the expense or adjustment is justified under IRS rules and regulations.</li>\n </ol>\n <p>Please ensure that all documents and information are provided at your earliest convenience to facilitate the efficient preparation of your tax returns. If you have any questions or need clarification on what constitutes appropriate documentation, feel free to contact us directly.</p>\n <p>Thank you for your prompt attention to this request. We look forward to assisting you further.</p>",
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
actionTaxSubject: "Medical and Dental Expenses",
|
|
459
|
+
actionTitle: "Medical and Dental Expenses",
|
|
460
|
+
actionInstructions: "<p>We have noted that you or your dependents have incurred significant medical or dental expenses during this tax year that were not reimbursed by insurance or other health plans. To ensure we can accurately account for these expenses in your tax preparation, we kindly request the following information:</p>\n <ol>\n <li>Detailed receipts or statements for all medical and dental expenses incurred for yourself and any dependents. This includes payments for:\n <ul>\n <li>Doctors and dentists</li>\n <li>Surgeons</li>\n <li>Prescriptions</li>\n <li>Medical equipment deemed necessary</li>\n <li>Any other health-related expenses not listed that you believe may be relevant</li>\n </ul>\n </li>\n <li>Documentation or statements showing any reimbursements received from insurance or health plans for these expenses.</li>\n <li>A list of dependents for whom these medical and dental expenses were incurred, along with their relationship to you.</li>\n <li>If applicable, records of travel expenses related to medical care, including mileage, parking, and tolls.</li>\n </ol>\n <p>Having these documents ready and accurately documented will help us ensure that we can maximize your tax deductions or credits related to these expenses. Please provide this information at your earliest convenience, or contact us to schedule a meeting to discuss these in further detail.</p>",
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
actionTaxSubject: "SALT Expenses",
|
|
464
|
+
actionTitle: "SALT Expenses",
|
|
465
|
+
actionInstructions: "<p>We are in the process of preparing your tax documents and need to compile accurate information regarding your State and Local Taxes (SALT) expenses. According to your recent submission, you indicated having paid significant amounts in these taxes over the last tax year. To ensure we can provide you with the best possible service and maximize your deductions, please provide the following detailed information:</p>\n <ol>\n <li><b>Summary of State and Local Income Taxes:</b> \n <ul>\n <li>W-2 forms showing state and local income taxes withheld.</li>\n <li>Estimated tax payment receipts to state and local governments, if applicable.</li>\n </ul>\n </li>\n <li><b>Property Taxes:</b>\n <ul>\n <li>Annual property tax statements for your primary residence, vacation homes, and any other real estate owned.</li>\n <li>Vehicle registration documents showing paid property tax amounts.</li>\n </ul>\n </li>\n <li><b>Sales Taxes:</b> (If you elected to deduct sales taxes instead of income taxes)\n <ul>\n <li>Detailed receipts of significant purchases (e.g., vehicle, boat, home renovation materials).</li>\n <li>Any documentation or summary of total sales taxes paid if you kept a detailed record.</li>\n </ul>\n </li>\n </ol>\n <p>Please ensure that all documents are dated within the last tax year. Providing this information as soon as possible will expedite the processing of your tax return and help us identify eligible deductions to optimize your tax situation.</p>\n <p>Should you have any questions or require assistance in gathering these documents, do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this request.</p>",
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
actionTaxSubject: "Deductible Interest",
|
|
469
|
+
actionTitle: "Deductible Interest",
|
|
470
|
+
actionInstructions: "<p>We are currently in the process of preparing your taxes and need further details regarding your deductible interest expenses. This is in relation to the information you provided indicating that you have incurred mortgage interest, late fees, or points on a home loan this year for either your primary residence or a second home. These expenses may significantly reduce your taxable income, ensuring a favorable tax outcome for you.</p>\n\n <h2>Required Documentation</h2>\n <p>Please provide the following documents and information at your earliest convenience:</p>\n \n <ol>\n <li><strong>Mortgage Interest Statements (Form 1098)</strong>: For each property you own. This includes your primary home and any second homes or rental properties.</li>\n <li><strong>Home Equity Loan Interest</strong>: If applicable, documentation for interest paid on home equity loans.</li>\n <li><strong>Investment Interest Expenses</strong>: If you have incurred any investment interest expenses, please provide detailed statements or account summaries showing the interest paid.</li>\n <li><strong>Points Paid</strong>: Documentation detailing points paid if you purchased or refinanced a home this tax year.</li>\n <li><strong>Late Payment Fees</strong> on Mortgage: If any, documentation of late payment fees associated with your home loan(s).</li>\n </ol>\n <p>To ensure your tax returns are prepared accurately and filed on time, we kindly ask that you submit the requested information as soon as possible. If you foresee any delays or have questions regarding these documents, please contact us immediately.</p>\n <p>Thank you for your prompt attention to this matter. We appreciate the opportunity to serve you and are here to assist with any questions or concerns you may have.</p>",
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
actionTaxSubject: "Charitable Contributions",
|
|
474
|
+
actionTitle: "Charitable Contributions",
|
|
475
|
+
actionInstructions: " <p>As part of preparing your tax returns, we noted that you have made charitable contributions this year. To accurately reflect these contributions on your tax return, and ensure you receive the appropriate deductions, we request the following information:</p>\n <ol>\n <li><strong>List of Charitable Organizations:</strong> Names and addresses of the organizations to which you have donated.</li>\n <li><strong>Contribution Dates:</strong> Dates on which each donation was made.</li>\n <li><strong>Donation Amounts:</strong> \n <ul>\n <li>For cash donations, the exact amount donated to each organization.</li>\n <li>For donations of goods, an estimated value of the items donated at the time of donation.</li>\n </ul>\n </li>\n <li><strong>Proof of Donation:</strong> \n <ul>\n <li>Receipts for cash donations.</li>\n <li>For donations of goods, any available documentation supporting the valuation and condition of the items at the time of donation.</li>\n <li>Bank statements or cancelled checks can also serve as proof for cash donations, if receipts are not available.</li>\n </ul>\n </li>\n <li><strong>Form 8283:</strong> If any single donation of goods exceeds $500 in value, please complete Section A of Form 8283. If the total value of goods donated exceeds $5,000, a qualified appraisal is required and should be provided along with Section B of Form 8283 completed.</li>\n </ol>\n\n <p>Correct and complete documentation for your charitable contributions is crucial to ensure compliance with IRS regulations and to maximize your tax benefits. Please forward the requested documents and information at your earliest convenience, allowing us to process your tax forms accurately and promptly.</p>\n <p>If you have any questions or need further clarification, please don't hesitate to contact us directly.</p>\n <p>Thank you for your attention to this matter.</p>",
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
actionTaxSubject: "Donated Property",
|
|
479
|
+
actionTitle: "Donated Property",
|
|
480
|
+
actionInstructions: "<p>Thank you for informing us about your donated property this tax year. To accurately document and claim these donations on your tax return, we require the following information:</p>\n <ol>\n <li>Description of the donated property (e.g., furniture, clothing, electronics).</li>\n <li>Names and addresses of the organizations to which you donated.</li>\n <li>The date of each donation.</li>\n <li>The fair market value of the property at the time of the donation. If possible, include how you determined this value.</li>\n <li>Any acknowledgment or receipt received from the organization. Please ensure it includes the organization\u2019s name, donation date, and a description of the donated items.</li>\n <li>If any single donation exceeded $500 in value, please provide additional documentation such as the original purchase price and how the value was determined.</li>\n </ol>\n <p>Please gather these documents at your earliest convenience so we can ensure your tax return accurately reflects your generous contributions. If you have multiple donations, organizing this information chronologically can be very helpful.</p>\n <p>Should you have any questions or need assistance in gathering this documentation, please feel free to reach out. We are here to help!</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
actionTaxSubject: "Donated Vehicle",
|
|
484
|
+
actionTitle: "Donated Vehicle",
|
|
485
|
+
actionInstructions: "<p>We appreciate your efforts in supporting charitable causes through your generous vehicle donation. To accurately document this donation for your tax records and ensure you receive the appropriate deduction, please provide the following details:</p>\n <ol>\n <li><strong>Charity Information:</strong>\n <ul>\n <li>Name of the charity</li>\n <li>Charity's tax-exempt ID number</li>\n <li>Address and phone number of the charity</li>\n </ul>\n </li>\n <li><strong>Vehicle Information:</strong>\n <ul>\n <li>Make, model, and year of the donated vehicle</li>\n <li>VIN (Vehicle Identification Number)</li>\n <li>A brief description of the vehicle's condition at the time of donation</li>\n </ul>\n </li>\n <li><strong>Donation Documentation:</strong>\n <ul>\n <li>A copy of the donation receipt provided by the charity</li>\n <li>Form 1098-C (Contributions of Motor Vehicles, Boats, and Airplanes) if received</li>\n <li>Any written acknowledgments or communications from the charity</li>\n </ul>\n </li>\n </ol>\n <p>Please ensure you submit these documents at your earliest convenience to facilitate the smooth processing of your tax returns.</p>\n <p>Should you need any assistance or have questions regarding your donation records, do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
actionTaxSubject: "Other Itemized Expenses",
|
|
489
|
+
actionTitle: "Other Itemized Expenses",
|
|
490
|
+
actionInstructions: "\n <p>Thank you for indicating that there might be additional individual, non-business expenses you've incurred this tax year, which may qualify for itemized deductions. To ensure we maximize your deductions and accurately complete your tax preparation, we kindly request that you provide detailed information and supporting documentation for these expenses.</p>\n <p>Please find below a guideline of the type of information and documents we are looking for:</p>\n <ol>\n <li>Details of the Expense: A brief description of each expense, including the purpose and why you believe it qualifies for an itemized deduction.</li>\n <li>Amount Paid: The total amount paid for each expense.</li>\n <li>Dates: The date(s) on which the expense was paid.</li>\n <li>Proof of Payment: Receipts, bank statements, or credit card statements showing the payment of these expenses.</li>\n <li>Legal or Financial Advisor Statements: If applicable, statements or letters from legal or financial advisors supporting the deductibility of the expense.</li>\n </ol>\n <p>Examples of such expenses might include but are not limited to:\n <ul>\n <li>Medical expenses not covered by health insurance</li>\n <li>Investment and financial advisor fees</li>\n <li>Tax preparation fees</li>\n <li>Safe deposit box rentals</li>\n </ul></p>\n <p>It is crucial that we receive this information as soon as possible to ensure the timely and efficient preparation of your tax documents. If you have any questions or need further clarification on what qualifies as an other itemized expense, please do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
actionTaxSubject: "Child Dependent Care Credit",
|
|
494
|
+
actionTitle: "Child Dependent Care Credit",
|
|
495
|
+
actionInstructions: "<p>Thank you for confirming that you paid for dependent care services last year to enable you to work or search for employment. To accurately claim the <strong>Child and Dependent Care Credit</strong> on your tax return, we require some additional information.</p>\n <p>Please provide the following details at your earliest convenience:</p>\n <ol>\n <li>The full name(s) and social security number(s) (SSN) of the dependent(s) cared for.</li>\n <li>The total amount paid for each dependent\u2019s care services.</li>\n <li>Name, address, and Taxpayer Identification Number (EIN or SSN) of the care provider(s).</li>\n <li>Proof of payment(s) made to the caregiver(s), such as receipts or bank statements.</li>\n <li>If the dependent is a disabled adult, please provide a brief description of their condition to confirm eligibility.</li>\n <li>Any applicable dates during which the care was provided, especially if the care was not for the full year.</li>\n </ol>\n <p>This information is crucial to ensure we can maximize your eligible credit and comply with the IRS requirements. Should you have concerns about gathering any of the requested documentation, please don't hesitate to reach out for assistance.</p>\n <p>Thank you for your prompt attention to this request. We are here to support you through this process to achieve the best possible outcome on your tax return.</p>",
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
actionTaxSubject: "Child Tax Credit",
|
|
499
|
+
actionTitle: "Child Tax Credit",
|
|
500
|
+
actionInstructions: "<p>We are in the process of examining your eligibility for the <strong>Child Tax Credit</strong>, based on your affirmative response regarding dependents under the age of 17. To ensure accurate and maximized tax benefits, kindly provide the following details:</p>\n <ol>\n <li>Full name(s) of the child or children.</li>\n <li>Date(s) of birth for each child.</li>\n <li>Social Security Number(s) for each child.</li>\n <li>A statement confirming the child or children lived with you for more than half of the last year. If applicable, please include documentation of custody arrangements.</li>\n <li>A detailed overview of how you provided more than half of their financial support last year. This can include records of housing, food, education, medical care, and other relevant expenses.</li>\n <li>Copy of your last year's tax return, if not already provided, to assist in evaluating eligibility and potential phase-outs based on income.</li>\n </ol>\n <p>Please provide the requested documents as soon as possible. Your prompt response will aid in the swift processing of your tax return and ensure that you receive all eligible tax benefits.</p>\n <p>If you have any questions or require assistance in gathering this information, please do not hesitate to contact us. We are here to help!</p>\n <p>Thank you for your cooperation and prompt attention to this matter.</p>",
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
actionTaxSubject: "Additional Child Tax Credit",
|
|
504
|
+
actionTitle: "Additional Child Tax Credit",
|
|
505
|
+
actionInstructions: "<p>We are currently in the process of preparing your tax returns and have noted that you may qualify for the <strong>Additional Child Tax Credit</strong> based on your preliminary information. To ensure we can accurately assess your eligibility and potentially maximize your tax return, we require the following specific documents and information:</p>\n <ol>\n <li><strong>Proof of Qualifying Children:</strong> Please provide the Social Security cards and birth certificates for each of your qualifying children under the age of 17.</li>\n <li><strong>Income Documentation:</strong> Furnish all W-2 forms, 1099 forms, and any other proof of income to confirm you have earned at least $2,500.</li>\n <li><strong>Previous Year\u2019s Tax Return:</strong> A copy of your last year's tax return to verify the Child Tax Credit amount you received or were eligible to receive.</li>\n <li><strong>IRS Letter 6419:</strong> If applicable, provide the IRS Letter 6419 for the tax year regarding the advance Child Tax Credit payments.</li>\n </ol>\n <p>To facilitate a smooth process, we kindly ask you to send the above as soon as possible, ensuring all submissions are clear and legible. Should you have any questions or require assistance in gathering these documents, please do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter. We are committed to serving your tax preparation needs efficiently and securing the best possible outcome for you and your family.</p>",
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
actionTaxSubject: "Credit for Other Dependents",
|
|
509
|
+
actionTitle: "Credit for Other Dependents",
|
|
510
|
+
actionInstructions: "<p>We noticed you indicated having dependents that may qualify for the <strong>Credit for Other Dependents</strong>. To ensure we can accurately assess your eligibility and potentially maximize your tax benefits, we need additional information about these dependents.</p>\n <ol>\n <li>Full name of each dependent.</li>\n <li>Their relationship to you (e.g., parent, sibling, adult child, or other).</li>\n <li>Their Social Security Number (SSN) or Individual Taxpayer Identification Number (ITIN).</li>\n <li>Confirmation that they lived with you for more than half of the tax year. Please provide any relevant details or documentation that can support this claim (if available).</li>\n <li>Detailed list of the financial support you provided. This includes, but is not limited to, food, shelter, clothing, medical care, education, and transportation costs.</li>\n <li>Any income information for each dependent. This includes income statements or an affirmation that they had no income.</li>\n <li>Confirmation that they are a U.S. citizen, U.S. national, or a resident alien of the United States.</li>\n </ol>\n <p>Please send the requested information at your earliest convenience to ensure we can proceed with your tax preparation without delay. If you have any questions or need assistance gathering this information, do not hesitate to contact us.</p> \n <p>Thank you for your prompt attention to this matter. We're here to help make your tax filing process as smooth and efficient as possible.</p>",
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
actionTaxSubject: "Adoption Credit",
|
|
514
|
+
actionTitle: "Adoption Credit",
|
|
515
|
+
actionInstructions: "<p>We understand that you've indicated having expenses related to adopting a child last year. To accurately claim the Adoption Credit on your tax returns, we require specific documentation.</p>\n <ol>\n <li>Finalized Adoption Decree or Certificate.</li>\n <li>Detailed Legal Fees Invoice (including the attorney\u2019s name, address, and the date of service).</li>\n <li>Court Costs Receipts.</li>\n <li>Travel Expenses Receipts (airfare, hotel, meals) directly related to the adoption process.</li>\n <li>Any relevant documents for a child with special needs, if applicable.</li>\n <li>Foreign adoption: Provide the country's legal documentation proving the adoption was finalized.</li>\n <li>IRS Form 8839, Qualified Adoption Expenses (if you have already attempted to complete this).</li>\n </ol>\n <p>Please ensure all provided documents are clear and legible. Incomplete or unclear documentation may delay the processing of your tax return and the potential credit.</p>\n <p>Should you have any questions or need clarification on what to provide, feel free to contact us directly. Our goal is to assist you in maximizing your benefits while ensuring compliance with IRS regulations.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
actionTaxSubject: "American Opportunity Tax Credit",
|
|
519
|
+
actionTitle: "American Opportunity Tax Credit",
|
|
520
|
+
actionInstructions: "<p>Based on your affirmative response regarding expenses paid last year for college, we may be able to claim the American Opportunity Tax Credit (AOTC) on your behalf. To accurately prepare and optimize your tax returns taking advantage of the AOTC, we kindly request the following detailed information and documents:</p>\n <ol>\n <li><strong>Tuition Statements</strong> (Form 1098-T) for each student for whom the expenses were paid. This form is typically provided by the educational institution.</li>\n <li><strong>Receipts and Records</strong> for related educational expenses not covered by the tuition statement. This includes books, supplies, and equipment required for enrollment or attendance.</li>\n <li>Confirmation that the student was enrolled <strong>at least half-time</strong> in a program leading to a degree, certificate, or other recognized educational credential.</li>\n <li>Documentation or statement confirming that the expenses were for the <strong>first four years</strong> of post-secondary education.</li>\n <li>Evidence to show that the student had not claimed the AOTC (or the former Hope credit) for more than four tax years.</li>\n <li>Proof that neither the student nor the claimant (if not the student) is a nonresident alien for tax purposes.</li>\n <li>A statement indicating if any felony drug convictions were received by the student during the tax year. This is essential as such convictions disqualify the student from claiming the AOTC.</li>\n </ol>\n <p>Please gather these documents at your earliest convenience. Once we have all the necessary information, we will proceed with the maximization and application of the American Opportunity Tax Credit to your tax return.</p>\n <p>If you have any questions or require assistance in gathering these documents, please do not hesitate to contact us.</p>",
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
actionTaxSubject: "Lifetime Learning Tax Credit",
|
|
524
|
+
actionTitle: "Lifetime Learning Tax Credit",
|
|
525
|
+
actionInstructions: "<p>As part of our tax preparation process, we've noted that you, your spouse, or your dependents have paid for higher education last year. This makes you potentially eligible for the Lifetime Learning Tax Credit, which can provide significant tax savings. To accurately determine your eligibility and calculate the credit, we require the following documents and information:</p>\n <ol>\n <li>Form 1098-T from each educational institution attended by you, your spouse, or dependents. This form shows the amounts paid for tuition and related expenses.</li>\n <li>Receipts or bank statements showing payments made for tuition, fees, books, supplies, and equipment required for your courses. Please note that room and board, insurance, medical expenses, and transportation are not qualified expenses.</li>\n <li>A detailed list of any scholarships, grants, or other tax-free educational assistance received. This helps us determine the net amount of qualified expenses.</li>\n <li>If applicable, any records of felonies (as individuals with felony drug convictions are not eligible for this credit).</li>\n <li>The total amount of expenses paid with distributed earnings from a 529 plan, if any. This information is crucial as it may affect the credit calculation.</li>\n </ol>\n <p>Please ensure the provided information is for the tax year we are preparing your return for. Gathering and verifying these documents early in the process will streamline your tax preparation and ensure you receive the maximum benefit legally available to you.</p>\n <p>If you have any questions or need assistance gathering these documents, please do not hesitate to contact us. Your prompt response will greatly aid in the efficient completion of your tax return.</p>",
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
actionTaxSubject: "Earned Income Tax Credit",
|
|
529
|
+
actionTitle: "Earned Income Tax Credit",
|
|
530
|
+
actionInstructions: "<p>Based on your response indicating that you earned money from work and have a relatively low to moderate income last year, you may be eligible for the Earned Income Tax Credit (EITC). To accurately assess your eligibility and potentially maximize your EITC claim, we kindly request the following documents and information:</p>\n <ol>\n <li><strong>Proof of Earned Income:</strong> Please provide all W-2 forms if you were employed by someone else, or a summary of income and expenses if you were self-employed or ran a business or farm.</li>\n <li><strong>Social Security Number (SSN):</strong> Copies of Social Security cards for you, your spouse (if filing jointly), and any dependents.</li>\n <li><strong>Proof of Residency:</strong> Documentation that your child(ren) lived with you in the United States for more than half of the tax year, if applicable. This can include school records, medical records, or a signed letter from a landlord or another third party.</li>\n <li><strong>Investment Income Statement:</strong> If applicable, please provide a statement of any investment income you received, as this can affect EITC eligibility.</li>\n <li><strong>Filing Status Verification:</strong> Confirm your filing status to ensure proper EITC calculation. This could be Single, Married Filing Jointly, Head of Household, etc.</li>\n <li><strong>Previous Year Tax Return:</strong> If this is not the first year you are claiming EITC or if you were eligible for EITC in the previous tax year, please provide a copy of your last year's tax return.</li>\n </ol>\n <p>Please ensure that all documents are clearly legible and submitted as soon as possible to ensure timely processing of your tax return and EITC claim. If you have any questions or need assistance gathering these documents, do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
actionTaxSubject: "Retirement Savings Contribution Credit",
|
|
534
|
+
actionTitle: "Retirement Savings Contribution Credit",
|
|
535
|
+
actionInstructions: "<p>We noticed that you've indicated contributing to a retirement plan in the last tax year. To ensure you receive the appropriate \"Retirement Savings Contribution Credit,\" we require specific information regarding your contributions. Please provide the following:</p>\n <ol>\n <li>A detailed list of the retirement plans you've contributed to (e.g., IRA, 401(k), etc.):</li>\n <ul>\n <li>Name of the plan(s)</li>\n <li>Type of plan(s)</li>\n <li>Contributed amount to each plan</li>\n </ul>\n <li>Your filing status (Single, Married Filing Jointly, etc.)</li>\n <li>Documentation of the contributions (e.g., account statements, Form 5498, transaction summaries)</li>\n <li>Confirmation of your age, to determine eligibility</li>\n <li>Any notices or statements from the plan administrator regarding non-deductible contributions</li>\n <li>For married filing jointly, similar details for your spouse\u2019s contributions, if applicable</li>\n </ol> \n <p>Please ensure the information is submitted in a timely manner to facilitate accurate and efficient processing of your tax return. Should you have any questions or need assistance gathering these details, do not hesitate to contact us directly.</p> \n <p>Thank you for your prompt attention to this matter.</p>",
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
actionTaxSubject: "Excess Social Security Credit",
|
|
539
|
+
actionTitle: "Excess Social Security Credit",
|
|
540
|
+
actionInstructions: "<p>Your response indicates that last year, you worked for two or more employers and had a total amount of Social Security taxes withheld from your paychecks that exceeded the limit for the year. To accurately calculate your potential Excess Social Security Credit and ensure proper adjustment on your tax return, we require the following documents and information:</p>\n <ol>\n <li><strong>W-2 Forms from All Employers:</strong> Please provide copies of W-2 forms from all your employers for the tax year in question. This is vital to calculate the exact amount of Social Security tax withheld.</li>\n <li><strong>Detailed Pay Stubs:</strong> If possible, include your final pay stubs of the year from each employer. This can help verify the total earnings and the amount of Social Security tax withheld, especially if any discrepancies arise with the W-2 information.</li>\n <li><strong>Personal Information:</strong> Ensure your full name, Social Security Number (SSN), and current address are correct and updated for accurate filing.</li>\n <li><strong>Confirmation Letter (If Available):</strong> If you've received any confirmation from the IRS or your employers regarding excess Social Security contributions, please include these communications.</li>\n </ol>\n <p>This information is crucial for accurately completing your tax return and ensuring that you receive any refund of excess Social Security taxes paid. Please send the requested documents as soon as possible to ensure timely processing of your tax return.</p>\n <p>If you have any questions or need further assistance, do not hesitate to reach out to us. Your prompt cooperation is greatly appreciated to facilitate a smooth tax filing process.</p>",
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
actionTaxSubject: "Premium Tax Credit",
|
|
544
|
+
actionTitle: "Premium Tax Credit",
|
|
545
|
+
actionInstructions: "<p>We are in the process of preparing your tax return and have noted that you or a family member enrolled in a health insurance plan through the Marketplace last year. This may make you eligible for the Premium Tax Credit, which can provide significant savings on your tax bill.</p>\n <p>To accurately calculate your Premium Tax Credit and ensure your tax return is correctly filed, we kindly request the following documents and information as soon as possible:</p>\n <ol>\n <li><strong>Form 1095-A, Health Insurance Marketplace Statement</strong>: This form is crucial as it provides details of the health coverage, including the months of coverage and the amount of premium paid. If you or any family member was enrolled in different plans, please provide a Form 1095-A for each plan.</li>\n <li><strong>Income Information</strong>: Please provide all sources of income to accurately calculate your household income. This includes, but is not limited to, W-2 forms, 1099 forms, and any other documentation demonstrating income received throughout the year.</li>\n <li><strong>Family Size and Household Information</strong>: Confirm the number of dependents and any changes in your household last year, as this could affect your eligibility and the amount of the credit.</li>\n <li><strong>Advanced Premium Tax Credit (APTC) Repayment Information</strong>, if applicable: If you received an advance payment of the premium tax credit, we need information regarding these payments to reconcile the amount on your return.</li>\n </ol>\n <p>Please ensure that all requested information is submitted as soon as possible to avoid any delays in processing your tax return. Should you have any questions or require assistance in gathering these documents, do not hesitate to contact our office.</p>\n <p>Thank you for your prompt attention to this matter. We look forward to serving you and ensuring you receive all the tax benefits you are entitled to.</p>",
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
actionTaxSubject: "Net Investment Income Tax",
|
|
549
|
+
actionTitle: "Net Investment Income Tax",
|
|
550
|
+
actionInstructions: "<p>As part of our ongoing efforts to ensure the accuracy and completeness of your tax filings, we have identified that your income this year includes significant amounts from investments. To accurately calculate your Net Investment Income Tax, it is essential that we gather comprehensive details regarding your investment income. Please provide the following documentation and information at your earliest convenience:</p>\n <ol>\n <li><strong>Interest Income Statements:</strong> Documents such as 1099-INT or similar forms showing interest earned.</li>\n <li><strong>Dividend Income Statements:</strong> Documents such as 1099-DIV or similar forms detailing dividend income received.</li>\n <li><strong>Capital Gains Records:</strong> Sales receipts or broker statements showing proceeds from the sale of assets, along with purchase documentation to calculate gains or losses.</li>\n <li><strong>Rental and Royalty Income Documentation:</strong> Detailed records of income and associated expenses from rental properties or royalties.</li>\n <li><strong>Non-Qualified Annuities Statements:</strong> Year-end statements for any non-qualified annuity contracts showing distributions received.</li>\n <li><strong>Form 8960:</strong> If available, any prior year Form 8960 you have filed for Net Investment Income Tax, which can provide a basis for estimates and planning.</li>\n </ol>\n <p>Ensuring we have all necessary information will not only streamline your tax preparation process but also help in leveraging potential tax-saving opportunities related to investment income. Please do not hesitate to contact us if you need assistance in gathering any of the above information.</p>\n <p>Thank you for your prompt attention to this matter. We look forward to assisting you further.</p>",
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
actionTaxSubject: "Additional Medicare Tax",
|
|
554
|
+
actionTitle: "Additional Medicare Tax",
|
|
555
|
+
actionInstructions: "<p>Thank you for indicating that your income may exceed the IRS thresholds for the Additional Medicare Tax for your filing status. In order to accurately assess and report this on your tax return, we require the following information:</p>\n <ol>\n <li>Confirmation of your filing status for the tax year (Married Filing Jointly, Married Filing Separately, Single, Head of Household, Qualifying Surviving Spouse).</li>\n <li>Detailed documentation of all sources of income for the tax year, including but not limited to:\n <ul>\n <li>W-2 Forms from all employers.</li>\n <li>1099 Forms (if applicable), including:\n <ul>\n <li>1099-MISC for independent contractors.</li>\n <li>1099-INT for interest earnings.</li>\n <li>1099-DIV for dividends.</li>\n <li>Any other 1099 forms received.</li>\n </ul>\n </li>\n <li>Documentation of any other income (e.g., foreign income, rental income).</li>\n </ul>\n </li>\n <li>Information on any deductions or exclusions to income that you intend to claim (e.g., IRA contributions, student loan interest).</li>\n </ol>\n <p>We also remind you that if you and/or your spouse are self-employed, additional details regarding your business income and expenses will be needed to determine your net earnings and potential Additional Medicare Tax obligations.</p>\n <p>This information is critical for ensuring compliance with IRS regulations and accurately calculating any potential Additional Medicare Tax liabilities. Please provide these documents at your earliest convenience.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
actionTaxSubject: "Nanny Tax",
|
|
559
|
+
actionTitle: "Nanny Tax",
|
|
560
|
+
actionInstructions: "<p>We are in the process of preparing your taxes and noted that you have indicated employing household help such as a nanny, housekeeper, or gardener. To ensure compliance with the so-called \"Nanny Tax\" regulations, we kindly request the following information:</p>\n <ol>\n <li>Complete name, address, and Social Security Number (SSN) of the employee.</li>\n <li>Total amount paid to the employee during the tax year.</li>\n <li>Any amounts withheld from the employee's pay for taxes, including Federal Income Tax, Social Security, and Medicare Taxes.</li>\n <li>Copies of any employment contracts or agreements.</li>\n <li>Proof of any employer contributions to Social Security, Medicare, and withheld income taxes (if applicable).</li>\n <li>Documentation that supports the employment status (e.g., Schedule H form).</li>\n <li>Any other relevant tax documents or information related to the employment.</li>\n </ol>\n <p>This information is crucial for accurately reporting your tax obligations and potentially avoiding penalties for non-compliance. Please provide the requested documents at your earliest convenience or contact us if you require assistance gathering this information.</p>\n <p>We appreciate your attention to this matter and are here to help you navigate through this process.</p>",
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
actionTaxSubject: "Foreign Earned Income",
|
|
564
|
+
actionTitle: "Foreign Earned Income",
|
|
565
|
+
actionInstructions: "<p>We understand that you've earned income from foreign sources this past tax year. To accurately report this and potentially take advantage of the Foreign Earned Income Exclusion or credit, we'll need specific documentation and information from you. Please provide the following:</p>\n <ol>\n <li>A detailed list of all foreign earned income. This includes any wages, salaries, or other compensation received from services performed while living abroad.</li>\n <li>Proof of your foreign earned income. This could be in the form of pay stubs, bank statements reflecting direct deposits, or equivalent documents.</li>\n <li>Information on the country or countries in which you earned this income.</li>\n <li>Dates of your residency in each foreign country.</li>\n <li>Any tax residency certificates or statements from foreign tax authorities.</li>\n <li>Details of any foreign tax paid, including tax returns filed in the foreign country, if available.</li>\n <li>Records of your U.S. and foreign addresses during the tax year.</li>\n <li>Information on any tax treaties between the U.S. and the country or countries you worked in.</li>\n <li>A signed Form 2555 or 2555-EZ, if you have already prepared this.</li>\n </ol>\n <p>These documents and details are crucial for determining the best approach to handle your foreign earned income and potentially maximize your tax benefits.</p>\n <p>Please have these materials ready and send them to us at your earliest convenience. If you have any questions or need further clarification on any of the items requested, do not hesitate to reach out.</p>\n <p>Thank you for your prompt attention to this matter. We look forward to assisting you with your taxes.</p>",
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
actionTaxSubject: "Foreign Housing Exclusion",
|
|
569
|
+
actionTitle: "Foreign Housing Exclusion",
|
|
570
|
+
actionInstructions: "<p>We've noted that you have answered <strong>yes</strong> to incurring eligible expenses for the Foreign Housing Exclusion due to earning income in a foreign country during this tax year. To accurately prepare your tax documents and ensure you receive the maximum exclusion possible, we require the following information and documents:</p>\n <ol>\n <li><strong>Rental Agreement:</strong> A copy of your current lease or rental agreement.</li>\n <li><strong>Utility Bills:</strong> Copies of utility bills for the tax year in question (excluding telephone charges).</li>\n <li><strong>Insurance Documents:</strong> Documents proving payment of real estate or rental insurance.</li>\n <li><strong>Other Housing Costs:</strong> Receipts or documentation for any additional eligible housing costs not previously mentioned.</li>\n <li><strong>Proof of Foreign Income:</strong> Documentation verifying your foreign earned income (e.g., pay stubs, bank statements).</li>\n <li><strong>Location and Duration:</strong> A brief statement detailing the location of your foreign residence and the duration of your stay during the tax year.</li>\n </ol>\n <p>Please ensure that all documents are clearly legible and in a format that can be easily shared electronically. The accuracy and completeness of these documents are essential for a correct and optimized filing of your tax return, especially concerning the Foreign Housing Exclusion.</p>\n <p>If you have questions or need further clarification on any of the required documents, please feel free to contact us at your convenience.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
571
|
+
},
|
|
572
|
+
{
|
|
573
|
+
actionTaxSubject: "Foreign Housing Deduction",
|
|
574
|
+
actionTitle: "Foreign Housing Deduction",
|
|
575
|
+
actionInstructions: "<p>We have noted that you answered <strong>yes</strong> to the question concerning potential eligibility for the <strong>Foreign Housing Deduction</strong>. This deduction is designed to help mitigate the higher cost of living abroad by allowing certain housing expenses to be deducted for tax purposes.</p>\n <p>To proceed with your tax filing and ensure you receive the maximum allowable deduction, we kindly request the following information and documents related to your housing expenses incurred while working abroad:</p>\n <ol>\n <li><strong>Rental Agreement/Lease:</strong> A copy of your rental agreement or lease that specifies the amount of rent paid and the period of occupancy.</li>\n <li><strong>Utility Bills:</strong> Copies of utility bills for the period you are claiming the deduction. This includes electricity, water, and gas, but excludes telephone charges.</li>\n <li><strong>Real Estate Insurance:</strong> Document proof of any real estate insurance premiums paid for your foreign housing.</li>\n <li><strong>Other Eligible Expenses:</strong> Receipts or invoices for any additional eligible living expenses not covered above. Please note, to qualify, these expenses must be directly related to your foreign housing and not covered under the base amount exemption.</li>\n <li><strong>Foreign Earned Income:</strong> Verification of your earned income while working abroad, as the deduction is tied to certain income limitations.</li>\n </ol>\n <p>We understand this may involve gathering several documents, but ensuring we have accurate and complete information is crucial for maximizing your potential deductions and remaining compliant with tax regulations.</p>\n <p>Please submit these documents at your earliest convenience or contact us to discuss any challenges you may face in obtaining them. Our team is here to support you through this process.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
actionTaxSubject: "Foreign Tax Credit",
|
|
579
|
+
actionTitle: "Foreign Tax Credit",
|
|
580
|
+
actionInstructions: "<p>We are reaching out to gather necessary information for claiming your Foreign Tax Credit, as indicated by your affirmative response indicating that you paid taxes to a foreign country on earned income there. To properly calculate and apply this credit to your U.S. tax return, we will need the following documents and information:</p>\n <ol>\n <li><strong>Earned Income Documentation:</strong> Please provide any documents that verify the amount of income earned in the foreign country. This may include, but is not limited to, pay stubs, W-2 forms from foreign employers, or any official income statements.</li>\n <li><strong>Proof of Tax Paid:</strong> To claim the Foreign Tax Credit, documentation showing the amount of tax paid to the foreign government is required. Acceptable forms of evidence include foreign tax return(s), withholding statements, or any official tax receipts provided by the foreign tax authority.</li>\n <li><strong>Taxpayer Identification Number:</strong> Your Social Security Number or Taxpayer Identification Number, for accurate processing of the tax credit.</li>\n <li><strong>Details of the Foreign Tax:</strong> Information about the type of tax paid to the foreign country (income tax, sales tax, etc.), including whether it was a federal, state/provincial, or local tax.</li>\n <li><strong>Proof of Residency (If Applicable):</strong> If your claim depends on residency status in the foreign country, please provide proof of residency for the relevant tax year.</li>\n <li><strong>Foreign Address (If Applicable):</strong> If you maintained a residence outside of the United States during the tax year, please provide the address.</li>\n </ol>\n <p>This information is vital for ensuring your tax returns are as beneficial to your situation as allowed by law and for preventing any unnecessary delays.</p>\n <p>Please upload the requested information to our secure client portal or email it to us at tax@lendahandaccounting.com at your earliest convenience. Should you have any questions or require assistance in gathering these documents, please do not hesitate to contact us.</p>\n <p>Thank you for your prompt attention to this matter.</p>",
|
|
581
|
+
},
|
|
582
|
+
{
|
|
583
|
+
actionTaxSubject: "Traditional IRA Contribution",
|
|
584
|
+
actionTitle: "Traditional IRA Contribution",
|
|
585
|
+
actionInstructions: "<p>We are in the process of preparing your tax documents and have noted your indication of making contributions to a Traditional IRA during the last tax year. To ensure accurate and beneficial tax filing, we require the following details about your Traditional IRA contributions and any distributions you may have taken:</p>\n <ol>\n <li>The total amount contributed to the Traditional IRA during the tax year.</li>\n <li>Dates of contributions to accurately report within the tax year.</li>\n <li>Documentation or statements from your IRA custodian specifying the contributions made.</li>\n <li>Any distributions taken from your Traditional IRA during the tax year, including:\n <ul>\n <li>Amount of each distribution.</li>\n <li>Dates of each distribution.</li>\n <li>Documentation or statements from your IRA custodian for these distributions.</li>\n </ul>\n </li>\n <li>Your year-end IRA statement for the tax year in question.</li>\n <li>Any notices received regarding non-deductible contributions, if applicable.</li>\n </ol>\n <p>This information is essential for accurately determining your tax liabilities or benefits associated with your IRA contributions, and for ensuring compliance with the IRS rules and regulations. </p>\n <p>Please provide these documents at your earliest convenience to facilitate the timely completion of your tax filing. If you have any questions or need further assistance in gathering this information, do not hesitate to reach out.<p>\n <p>Thank you for your prompt attention to this request.</p>",
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
actionTaxSubject: "Roth IRA Contribution",
|
|
589
|
+
actionTitle: "Roth IRA Contribution",
|
|
590
|
+
actionInstructions: "<p>We have noted your contributions to a Roth IRA during the last tax year as part of our tax preparation process. To ensure we accurately capture all relevant tax information and potentially optimize your tax situation, we kindly request the following specifics about your Roth IRA contributions and any distributions:</p>\n <ol>\n <li>The total amount contributed to the Roth IRA during the tax year.</li>\n <li>The dates on which these contributions were made.</li>\n <li>Official statements or documentation from your IRA custodian that detail these contributions.</li>\n <li>Information on any distributions, should they apply, including:\n <ul>\n <li>The total amount of each distribution taken from the Roth IRA.</li>\n <li>The dates of these distributions.</li>\n <li>Distribution statements or relevant documentation from your IRA custodian.</li>\n </ul>\n </li>\n <li>Your year-end account statement for the Roth IRA for the tax year in question.</li>\n <li>Any pertinent information or notices regarding your Roth IRA contributions or distributions, including tax reporting forms like Form 5498 or Form 1099-R, if received.</li>\n </ol>\n <p>Gathering this information is vital for a comprehensive analysis of your tax situation, ensuring the correct treatment of your Roth IRA contributions and any distributions, and complying with IRS regulations.</p>\n <p>Please forward the requested documentation at your earliest convenience to ensure a smooth and efficient tax preparation process. Should you have any queries or require assistance in obtaining these documents, please feel free to contact us.</p>\n <p>We appreciate your cooperation and prompt response.</p>",
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
actionTaxSubject: "Foreign Assets",
|
|
594
|
+
actionTitle: "Foreign Assets",
|
|
595
|
+
actionInstructions: "<p>We're making progress on your tax return, and based on your response indicating ownership or financial interest in foreign assets, additional details are necessary. These details are crucial for accurate reporting and compliance with the Foreign Account Tax Compliance Act (FATCA) and Report of Foreign Bank and Financial Accounts (FBAR) requirements.</p>\n <p>Please provide the following information:</p>\n <ol>\n <li><strong>Account Statements:</strong> Copies of all statements from foreign banks, mutual funds, or securities accounts. This includes anything with an aggregate value over $10,000 at any point during the tax year.</li>\n <li><strong>Account Numbers:</strong> The account numbers for all applicable accounts.</li>\n <li><strong>Institution Names:</strong> The names and addresses of the financial institutions where these accounts are held.</li>\n <li><strong>Maximum Values:</strong> The maximum value of each account during the tax year, converted to USD using the end-of-year exchange rate.</li>\n <li><strong>Ownership Details:</strong> Clarification on the type of ownership (individual, joint, etc.) and the percentage of ownership if not solely owned.</li>\n <li><strong>Contact Information:</strong> If managed by a financial advisor or institution, provide their contact information.</li>\n <li><strong>Income Generated:</strong> Information on any income generated from these assets, such as interest, dividends, or capital gains.</li>\n </ol>\n <p>This information is imperative to ensure full compliance and mitigate any risks of penalties. Kindly send the requested documents and information as soon as possible, to allow ample time for proper filing.</p>\n <p>If you have any questions or need further clarification, please do not hesitate to contact us. Thank you for your prompt attention to this matter.</p>",
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
actionTaxSubject: "Foreign Gifts",
|
|
599
|
+
actionTitle: "Foreign Gifts",
|
|
600
|
+
actionInstructions: "<p>As part of our tax preparation process, we've noted that you indicated receiving gifts or bequests from foreign entities that exceed the $100,000 threshold during the tax year. To accurately report these on your tax return and ensure compliance with IRS regulations, we require additional information.</p>\n <p>Please provide the following details at your earliest convenience:</p>\n <ol>\n <li><strong>Complete list of foreign gifts or bequests received:</strong> Please provide details for each gift or bequest, including the date received and the exact amount in USD (U.S. Dollars).</li>\n <li><strong>Donor Information:</strong> For each gift received, provide the donor's full name, address, and their relationship to you.</li>\n <li><strong>Source of Gift:</strong> Detail the source of each gift, including whether it originated from an individual, estate, foreign corporation, or partnership.</li>\n <li><strong>Foreign Country Information:</strong> Specify the country from which each gift or bequest was received.</li>\n <li><strong>Documentation:</strong> Attach any relevant documentation such as bank statements, foreign gift declaration forms, or legal documents related to the receipt of these gifts.</li>\n </ol>\n <p>This information is crucial to fulfill our obligations and ensure the correctness of your tax filings. Failure to report foreign gifts or bequests accurately can result in penalties. We appreciate your prompt attention to this request.</p>\n <p>If you have any questions or need assistance gathering this information, please do not hesitate to contact us.</p>",
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
actionTaxSubject: "Depreciable Assets",
|
|
604
|
+
actionTitle: "Depreciable Assets",
|
|
605
|
+
actionInstructions: "<p>As we begin preparing your tax return, we need your assistance in gathering information about your depreciable assets. This information is essential for accurately calculating depreciation expense and ensuring compliance with tax regulations.</p>\n\n <h2>Action Item:</h2>\n <p>Please access your <strong>secure client upload portal</strong> and navigate to the following path: <code>taxes/[CURRENT TAX YEAR]/Depreciation/Assets.xlsx</code>. You will find a spreadsheet titled \"<strong>Depreciable Assets</strong>.\" We kindly request that you provide the following information for each depreciable asset in your business:</p>\n <ul>\n <li><strong>Description:</strong> Provide a brief description that clearly identifies the asset.</li>\n <li><strong>Date Acquired:</strong> Specify the date you purchased or acquired the asset.</li>\n <li><strong>Cost / Basis:</strong> Indicate the original cost of the asset or the adjusted basis if depreciation has been claimed in previous years.</li>\n <li><strong>Business % Use:</strong> Estimate the percentage of time the asset is used for business purposes versus personal use.</li>\n <li><strong>Used Property:</strong> Indicate whether the asset was purchased new or used.</li>\n </ul>\n\n <h3>Important Note on Safe-Harbor Expensing:</h3>\n <p>Please be aware that under the safe-harbor <em>de minimis</em> expensing rule, you can immediately expense the cost of any individual asset that costs less than $2,500, provided you do not have an Applicable Financial Statement (AFS). If an asset meets this criterion, you do not need to include it in the spreadsheet.</p>\n\n <p>We encourage you to be as comprehensive as possible when listing your assets. If you are unsure whether an item should be included, please provide the details, and we will determine the appropriate treatment.</p>\n\n <p>If you have any questions or need further clarification, please do not hesitate to <strong>contact us</strong>. We appreciate your prompt attention to this matter and look forward to working with you to ensure the accuracy and completeness of your tax return.</p>",
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
actionTaxSubject: "Passive Business Activities",
|
|
609
|
+
actionTitle: "Passive Business Activities",
|
|
610
|
+
actionInstructions: "<p>In order to accurately prepare your tax returns and ensure compliance with IRS regulations, we require detailed information about the passive activities your business is engaged in. Passive activities generally involve business or trade activities in which you do not materially participate. Understanding these activities is crucial for proper tax reporting and potential tax benefits.</p>\n\n <p>Please provide the following information if you believe we do not already have the information in your business financials:</p>\n \n <ol>\n <li><strong>Names and Descriptions:</strong> A list and brief description of each passive activity your business is engaged in.</li>\n <li><strong>Financial Statements:</strong>If not already in your business financials, Profit and loss statements for each passive activity, detailing income and expenses.</li>\n <li><strong>Ownership Structure:</strong> Documentation outlining your ownership interest in each activity, including any joint ventures or partnerships.</li>\n <li><strong>Rental Properties (if applicable):</strong> If any passive activities include rental properties, please provide the addresses, lease agreements, and a schedule of rents collected and expenses incurred.</li>\n <li><strong>Log of Personal Involvement:</strong> For each activity, a log or record of your personal involvement or participation over the tax year, to substantiate the extent of your material participation.</li>\n <li><strong>Prior Year Losses:</strong> Information on any losses from these activities carried over from previous tax years.</li>\n </ol>\n \n <p>This information is pivotal for assessing your passive activity losses and correctly applying them against your passive activity income, in line with the IRS passive activity loss rules.</p>\n \n <p>We appreciate your cooperation and prompt response to this request. Should you have any questions or require assistance in gathering this information, please do not hesitate to contact us.</p>",
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
actionTaxSubject: "General Business Credits",
|
|
614
|
+
actionTitle: "General Business Credits",
|
|
615
|
+
actionInstructions: "<p>We are exploring opportunities to optimize your tax benefits through various general business credits. These credits are designed to encourage certain business activities that meet the goals and policies established by the government, ranging from investment in property to fostering social responsibilities like employment opportunities for veterans. Understanding whether your business is eligible for these can significantly impact your financials favorably.</p>\n\n <p>Below is a brief explanation of some of the most common General Business Credits and others that might apply to your situation:</p>\n \n <ol>\n <li><strong>Investment Credit (Form 3468):</strong> For investing in certain property like buildings, equipment, or other tangible property.</li>\n <li><strong>Work Opportunity Tax Credit (Form 5884):</strong> For hiring individuals from certain target groups who have consistently faced significant barriers to employment.</li>\n <li><strong>Disabled Access Credit:</strong> If your business incurred expenses for making it more accessible to individuals with disabilities, complying with the Americans with Disabilities Act (ADA).</li>\n <li><strong>Credit for Employer Social Security and Medicare Taxes on Employee Tips (Form 8846):</strong> If you have employees who receive tips, this credit relates to the Social Security and Medicare taxes you pay on those tips.</li>\n <li><strong>Employer Credit for Paid Family and Medical Leave (FMLA Leave) (Form 8994):</strong> For businesses providing paid family and medical leave to their employees.</li>\n <li><strong>Credit for Small Employer Health Insurance Premiums (Form 8941):</strong> If you provide health insurance to your employees, you might be eligible for this credit.</li>\n <li><strong>Research and Development Credit (Form 6765):</strong> For businesses engaging in qualified research activities.</li>\n <li><strong>Credit for Employer-Provided Child Care Facilities and Services:</strong> If your business provides child care facilities or services to your employees.</li>\n <li><strong>Credit for Small Employer Pension Plan Startup Costs and Auto-Enrollment (Form 8881):</strong> If your business has set up or plans to set up a pension plan for your employees.</li>\n <li><strong>Other credits:</strong> Additional credits can be found in detail at <a href=\"https://www.irs.gov/instructions/i3800\">IRS Instructions for Form 3800</a>.</li>\n </ol>\n \n <p>We would like to assess your potential eligibility for these credits. Please review the above list and <strong>inform us if you believe your business may qualify</strong> for any of them based on your current operations or future plans. Additionally, if there are any other credits not listed that you believe may apply to your business, let us know.</p>\n \n <p>Your insights will greatly assist us in ensuring we explore all avenues to reduce your tax liability and capitalize on available credits.</p>\n \n <p>We appreciate your prompt attention to this matter. If you have any questions or need further clarification on any of these credits, please feel free to contact us.</p>",
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
actionTaxSubject: "Business Assets Sold",
|
|
619
|
+
actionTitle: "Business Assets Sold",
|
|
620
|
+
actionInstructions: "<p>As we work to diligently prepare your business\u2019s tax documentation, we need to ensure completeness and accuracy in reporting all relevant transactions that have occurred within the tax year. An important area of focus is the sale of any business assets. This includes both assets actively in use and those that have been previously depreciated.</p>\n\n <p>The sale of business assets can have significant tax implications, including potential capital gains or losses, recapture of depreciation, and impacts on your business\u2019s cash flow and financial statements. Accordingly, it is crucial for us to accurately report these transactions to the IRS.</p>\n \n <p>Please confirm if your business has sold any assets during the current tax period by providing the following information:</p>\n \n <ul>\n <li><strong>Asset Description:</strong> A brief description of each asset sold (e.g., equipment, property, vehicles).</li>\n <li><strong>Date of Sale:</strong> The date on which each asset was sold.</li>\n <li><strong>Sale Proceeds:</strong> The amount of money received from the sale of each asset.</li>\n <li><strong>Original Purchase Price and Date:</strong> The original purchase price and purchase date for each asset.</li>\n <li><strong>Accumulated Depreciation:</strong> The total depreciation claimed on each asset up to the point of sale.</li>\n </ul>\n \n <p>If you have not sold any business assets during this period, please confirm this as well. Your timely response to this inquiry is crucial for the completion of your tax return.</p>\n \n <p>If you have any questions or need assistance in gathering this information, please do not hesitate to reach out. We are here to assist you every step of the way.</p>\n \n <p>Thank you for your prompt attention to this matter.</p>",
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
actionTaxSubject: "Home Office Deduction",
|
|
624
|
+
actionTitle: "Home Office Deduction Information",
|
|
625
|
+
actionInstructions: "<p><strong>Important:</strong> If you've already received and completed a business use of home spreadsheet from us, you can safely ignore this action item. We'll close it out once we verify we have the information on file.</p>\n \n <p>You've indicated that you use part of your home regularly and exclusively for business purposes. This may qualify you for a home office deduction. To accurately calculate this deduction, we need the following information:</p>\n \n <ul>\n <li>Total square footage of your home</li>\n <li>Square footage of your home office</li>\n <li>Brief description of how you use this space for business</li>\n <li>Home-related expenses: mortgage interest/rent, property taxes, insurance, utilities, repairs</li>\n <li>Direct expenses for the office space</li>\n </ul>\n \n <p>If you haven't received our business use of home spreadsheet, please let us know, and we'll provide it to you for easy completion of this information.</p>\n \n <p>This data will help us accurately calculate your potential home office deduction and optimize your tax return. If you have any questions, please don't hesitate to ask.</p>"
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
actionTaxSubject: "Business Use of Personal Vehicle",
|
|
629
|
+
actionTitle: "Personal Vehicle Business Use Information",
|
|
630
|
+
actionInstructions: "<p><strong>Important:</strong> If you've already provided us with a completed vehicle expense log or spreadsheet for the tax year, you can ignore this action item. We'll close it once we verify we have the information on file.</p>\n \n <p>You've indicated that you use your personal vehicle for business purposes. This may qualify you for vehicle-related tax deductions. To accurately calculate these deductions, we need the following information:</p>\n \n <ul>\n <li>Vehicle make, model, and year</li>\n <li>Date you started using the vehicle for business</li>\n <li>Was the vehicle purchased in anticipation of business use? If yes, provide purchase date and cost</li>\n <li>Total miles driven during the tax year</li>\n <li>Business miles driven during the tax year</li>\n <li>Commuting miles (if applicable)</li>\n <li>Actual expenses:\n <ul>\n <li>Gas and oil</li>\n <li>Maintenance and repairs</li>\n <li>Vehicle registration fees</li>\n <li>Vehicle insurance</li>\n <li>Lease payments (if applicable)</li>\n <li>Parking fees and tolls for business trips</li>\n </ul>\n </li>\n <li>Do you (or your spouse) have another vehicle available for personal use?</li>\n <li>Do you have written evidence to support your mileage log?</li>\n </ul>\n \n <p>Please note: If you purchased the vehicle in anticipation of business use, we may be able to claim depreciation. This could potentially increase your deduction but may also have implications for future tax years.</p>\n \n <p>If you haven't received our vehicle expense log spreadsheet, please let us know, and we'll provide it to you for easy completion of this information.</p>\n \n <p>This data will help us accurately calculate your vehicle-related deductions and optimize your tax return. If you have any questions about what qualifies as business use or how to track your mileage, please don't hesitate to ask.</p>"
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
actionTaxSubject: "Business Travel Paid with Personal Funds",
|
|
634
|
+
actionTitle: "Business Travel Reimbursement Information",
|
|
635
|
+
actionInstructions: "<p><strong>Important:</strong> If you've already provided us with a detailed log or spreadsheet of your business travel expenses for the tax year, you can ignore this action item. We'll close it once we verify we have the information on file.</p>\n \n <p>You've indicated that you paid for business travel using personal funds. This may qualify you for tax deductions or reimbursements from your business. To accurately account for these expenses, we need the following information:</p>\n \n <ul>\n <li>Date of each business trip</li>\n <li>Destination and purpose of each trip</li>\n <li>Method of travel (e.g., personal vehicle, public transportation, airfare)</li>\n <li>Total cost of travel, including transportation, lodging, and meals</li>\n <li>Receipts or documentation supporting each expense</li>\n <li>Any business miles driven (if applicable) during these trips</li>\n <li>Whether you were reimbursed by your business or another entity for any of these expenses</li>\n </ul>\n \n <p>Please note: If you haven't tracked these expenses throughout the year, now is a good time to gather this information. Accurate records will help ensure you receive the maximum allowable deductions and avoid any issues in the event of an audit.</p>\n \n <p>If you need a template or guidance on how to organize this information, please let us know, and we'll provide the necessary tools to assist you.</p>\n \n <p>Providing this data will help us accurately calculate your travel-related deductions and optimize your tax return. If you have any questions about what qualifies as a business expense or how to document your travel, please don't hesitate to ask.</p>"
|
|
636
|
+
}
|
|
637
|
+
];
|
|
638
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXRheC1mcmFnbWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWN0aW9uLXRlbXMvYWN0aW9uLXRheC1mcmFnbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLElBQU0sa0JBQWtCLEdBQUc7SUFDaEM7UUFDRSxnQkFBZ0IsRUFBRSx3QkFBd0I7UUFDMUMsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxrQkFBa0IsRUFBRSxnbENBUXVIO0tBQzVJO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxzQkFBc0I7UUFDeEMsV0FBVyxFQUFFLHlEQUF5RDtRQUN0RSxrQkFBa0IsRUFBRSxzekRBMkIrTjtLQUNwUDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsWUFBWTtRQUM5QixXQUFXLEVBQUUsbUNBQW1DO1FBQ2hELGtCQUFrQixFQUFFLGcyREFhc0k7S0FDM0o7SUFDRDtRQUNFLGdCQUFnQixFQUFFLG1CQUFtQjtRQUNyQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFLDRrREFhME47S0FDL087SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsaUNBQWlDO1FBQzlDLGtCQUFrQixFQUFFLHV3REFhbUc7S0FDeEg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFLCtnRUFXcU47S0FDMU87SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFLHNwQ0FTdkI7S0FDRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUUsd3VDQVlzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsOEJBQThCO1FBQ2hELFdBQVcsRUFBRSw4QkFBOEI7UUFDM0Msa0JBQWtCLEVBQUUseXREQVNvTTtLQUN6TjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0JBQWtCO1FBQ3BDLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0Isa0JBQWtCLEVBQUUscWpEQVErSTtLQUNwSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsaUNBQWlDO1FBQ25ELFdBQVcsRUFBRSxvQ0FBb0M7UUFDakQsa0JBQWtCLEVBQUUsbytEQVU0UDtLQUNqUjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMkJBQTJCO1FBQzdDLFdBQVcsRUFBRSwyQkFBMkI7UUFDeEMsa0JBQWtCLEVBQUUsMHdDQVN1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUseUJBQXlCO1FBQzNDLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsa0JBQWtCLEVBQUUsMHJEQVc2RTtLQUNsRztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUUsdzBEQVUwSjtLQUMvSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0JBQWtCO1FBQ3BDLFdBQVcsRUFBRSxhQUFhO1FBQzFCLGtCQUFrQixFQUFFLDA0Q0FVaUs7S0FDdEw7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFLG1tQ0FVMEY7S0FDL0c7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFLDY1REFTaUY7S0FDdEc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLCtCQUErQjtRQUNqRCxXQUFXLEVBQUUsK0JBQStCO1FBQzVDLGtCQUFrQixFQUFFLG1yREFvQjRJO0tBQ2pLO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQ0FBZ0M7UUFDbEQsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxrQkFBa0IsRUFBRSxtekRBVWdJO0tBQ3JKO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxjQUFjO1FBQ2hDLFdBQVcsRUFBRSxjQUFjO1FBQzNCLGtCQUFrQixFQUFFLG11REFXdUQ7S0FDNUU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFLGdoREFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDRCQUE0QjtRQUM5QyxXQUFXLEVBQUUsNEJBQTRCO1FBQ3pDLGtCQUFrQixFQUFFLGtvQ0FVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGFBQWE7UUFDL0IsV0FBVyxFQUFFLGFBQWE7UUFDMUIsa0JBQWtCLEVBQUUsazRDQVl1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFdBQVcsRUFBRSxxQkFBcUI7UUFDbEMsa0JBQWtCLEVBQUUseWxEQVN1RDtLQUM1RTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsbUNBQW1DO1FBQ3JELFdBQVcsRUFBRSxtQ0FBbUM7UUFDaEQsa0JBQWtCLEVBQUUsODBEQXdCNkM7S0FDbEU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFLDRtQ0FRMks7S0FDaE07SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFLCt1REFhbUI7S0FDeEM7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFLDZpQkFReUY7S0FDOUc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsa0JBQWtCO1FBQy9CLGtCQUFrQixFQUFFLHdnREFROEY7S0FDbkg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFLDg2Q0FRaUo7S0FDdEs7SUFDRDtRQUNFLGdCQUFnQixFQUFFLFdBQVc7UUFDN0IsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRSxvdkRBV2tJO0tBQ3ZKO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLGtCQUFrQixFQUFFLHNsREFZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLHM1REFjdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFLG02Q0FVbUI7S0FDeEM7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLHluREFzQnVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw0QkFBNEI7UUFDOUMsV0FBVyxFQUFFLDRCQUE0QjtRQUN6QyxrQkFBa0IsRUFBRSxtaEVBK0IwSDtLQUMvSTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUJBQXVCO1FBQ3pDLFdBQVcsRUFBRSx1QkFBdUI7UUFDcEMsa0JBQWtCLEVBQUUsNDREQWlDbUI7S0FDeEM7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHVCQUF1QjtRQUN6QyxXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLGtCQUFrQixFQUFFLHM3RUFZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsd0JBQXdCO1FBQ3JDLGtCQUFrQixFQUFFLDJxREFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGVBQWU7UUFDakMsV0FBVyxFQUFFLGVBQWU7UUFDNUIsa0JBQWtCLEVBQUUsMDNDQVkyRjtLQUNoSDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRSwwK0NBVXVEO0tBQzVFO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxvQkFBb0I7UUFDdEMsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxrQkFBa0IsRUFBRSxreERBVXdDO0tBQzdEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRSwwb0RBUTJNO0tBQ2hPO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx3QkFBd0I7UUFDMUMsV0FBVyxFQUFFLHdCQUF3QjtRQUNyQyxrQkFBa0IsRUFBRSxtOENBZWdDO0tBQ3JEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw0QkFBNEI7UUFDOUMsV0FBVyxFQUFFLDRCQUE0QjtRQUN6QyxrQkFBa0IsRUFBRSwrZ0RBbUJ1RTtLQUM1RjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRSw0eURBV2dDO0tBQ3JEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw4QkFBOEI7UUFDaEQsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQyxrQkFBa0IsRUFBRSxpd0RBZXlFO0tBQzlGO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQkFBZ0I7UUFDbEMsV0FBVyxFQUFFLGdCQUFnQjtRQUM3QixrQkFBa0IsRUFBRSxxNERBMEJrRjtLQUN2RztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFdBQVcsRUFBRSxxQkFBcUI7UUFDbEMsa0JBQWtCLEVBQUUsbzdEQVVzSjtLQUMzSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsK0JBQStCO1FBQ2pELFdBQVcsRUFBRSwrQkFBK0I7UUFDNUMsa0JBQWtCLEVBQUUsOGlEQVNnRDtLQUNyRTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUUsK3VEQVM0UTtLQUNqUztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUseUJBQXlCO1FBQzNDLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsa0JBQWtCLEVBQUUscXVFQXVDeUU7S0FDOUY7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFLCt2REFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLGlrREFVbUI7S0FDeEM7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGdCQUFnQjtRQUNsQyxXQUFXLEVBQUUsZ0JBQWdCO1FBQzdCLGtCQUFrQixFQUFFLDB2REFTbUI7S0FDeEM7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLG84REFVd0I7S0FDN0M7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsa0JBQWtCO1FBQy9CLGtCQUFrQixFQUFFLG9pREFVb0k7S0FDeko7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFLDRxREFVd0M7S0FDN0Q7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFLHM5Q0FRdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHdCQUF3QjtRQUMxQyxXQUFXLEVBQUUsd0JBQXdCO1FBQ3JDLGtCQUFrQixFQUFFLDA2Q0FPaUs7S0FDdEw7SUFDRDtRQUNFLGdCQUFnQixFQUFFLG1CQUFtQjtRQUNyQyxXQUFXLEVBQUUsbUJBQW1CO1FBQ2hDLGtCQUFrQixFQUFFLDYvREFZc0o7S0FDM0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLHdxREFnQjBIO0tBQy9JO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxxQ0FBcUM7UUFDdkQsV0FBVyxFQUFFLHFDQUFxQztRQUNsRCxrQkFBa0IsRUFBRSwwdURBZXVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxnQ0FBZ0M7UUFDbEQsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxrQkFBa0IsRUFBRSxra0VBV3lDO0tBQzlEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxjQUFjO1FBQ2hDLFdBQVcsRUFBRSxjQUFjO1FBQzNCLGtCQUFrQixFQUFFLHUyQ0FReU07S0FDOU47SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFLDZqREFXb0g7S0FDekk7SUFDRDtRQUNFLGdCQUFnQixFQUFFLG1CQUFtQjtRQUNyQyxXQUFXLEVBQUUsbUJBQW1CO1FBQ2hDLGtCQUFrQixFQUFFLDRoREFXdUY7S0FDNUc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlDQUFpQztRQUNuRCxXQUFXLEVBQUUsaUNBQWlDO1FBQzlDLGtCQUFrQixFQUFFLDA2Q0FlaU87S0FDdFA7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLHd4REFZbUQ7S0FDeEU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFLDhpREFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGVBQWU7UUFDakMsV0FBVyxFQUFFLGVBQWU7UUFDNUIsa0JBQWtCLEVBQUUsazdDQVFrTjtLQUN2TztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsa0NBQWtDO1FBQ3BELFdBQVcsRUFBRSxrQ0FBa0M7UUFDL0Msa0JBQWtCLEVBQUUsK2pEQVFpUztLQUN0VDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRSw2MUNBVzJIO0tBQ2hKO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSw0QkFBNEI7UUFDOUMsV0FBVyxFQUFFLDRCQUE0QjtRQUN6QyxrQkFBa0IsRUFBRSxxMURBc0JrRjtLQUN2RztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUUsKzVEQVdtRTtLQUN4RjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsaUNBQWlDO1FBQ25ELFdBQVcsRUFBRSxpQ0FBaUM7UUFDOUMsa0JBQWtCLEVBQUUsd3FEQWV1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNEJBQTRCO1FBQzlDLFdBQVcsRUFBRSw0QkFBNEI7UUFDekMsa0JBQWtCLEVBQUUsdWpFQVc2SDtLQUNsSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsd0NBQXdDO1FBQzFELFdBQVcsRUFBRSx3Q0FBd0M7UUFDckQsa0JBQWtCLEVBQUUsaXFEQVMrSTtLQUNwSztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsd0JBQXdCO1FBQzFDLFdBQVcsRUFBRSx3QkFBd0I7UUFDckMsa0JBQWtCLEVBQUUsbXBDQVVtQjtLQUN4QztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsOEJBQThCO1FBQ2hELFdBQVcsRUFBRSw4QkFBOEI7UUFDM0Msa0JBQWtCLEVBQUUsMjlEQWNxSztLQUMxTDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsdUNBQXVDO1FBQ3pELFdBQVcsRUFBRSx1Q0FBdUM7UUFDcEQsa0JBQWtCLEVBQUUsaTZDQVN1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsb0NBQW9DO1FBQ3RELFdBQVcsRUFBRSxvQ0FBb0M7UUFDakQsa0JBQWtCLEVBQUUsNjBEQVNzSDtLQUMzSTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsd0NBQXdDO1FBQzFELFdBQVcsRUFBRSx3Q0FBd0M7UUFDckQsa0JBQWtCLEVBQUUsZ3REQVVvSDtLQUN6STtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMkNBQTJDO1FBQzdELFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUUsa29EQVU2UTtLQUNsUztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMENBQTBDO1FBQzVELFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQsa0JBQWtCLEVBQUUsZ3REQTBCdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtDQUFrQztRQUNwRCxXQUFXLEVBQUUsa0NBQWtDO1FBQy9DLGtCQUFrQixFQUFFLDYrQ0FldUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGNBQWM7UUFDaEMsV0FBVyxFQUFFLGNBQWM7UUFDM0Isa0JBQWtCLEVBQUUsczVEQWdCOEs7S0FDbk07SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLDhrQ0FVZ0o7S0FDcks7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlDQUFpQztRQUNuRCxXQUFXLEVBQUUsaUNBQWlDO1FBQzlDLGtCQUFrQixFQUFFLDhsREFRNks7S0FDbE07SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFLHluREFRME47S0FDL087SUFDRDtRQUNFLGdCQUFnQixFQUFFLDRCQUE0QjtRQUM5QyxXQUFXLEVBQUUsNEJBQTRCO1FBQ3pDLGtCQUFrQixFQUFFLHN2REFVa0Y7S0FDdkc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLHkrQ0FlbVI7S0FDeFM7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGVBQWU7UUFDakMsV0FBVyxFQUFFLGVBQWU7UUFDNUIsa0JBQWtCLEVBQUUsMHdEQXVCd0M7S0FDN0Q7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHFCQUFxQjtRQUN2QyxXQUFXLEVBQUUscUJBQXFCO1FBQ2xDLGtCQUFrQixFQUFFLHF4REFhc0o7S0FDM0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFLDhnRUFzQmdDO0tBQ3JEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsV0FBVyxFQUFFLGtCQUFrQjtRQUMvQixrQkFBa0IsRUFBRSwrMkNBV3VDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxpQkFBaUI7UUFDbkMsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixrQkFBa0IsRUFBRSxpK0NBMEJ1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUseUJBQXlCO1FBQzNDLFdBQVcsRUFBRSx5QkFBeUI7UUFDdEMsa0JBQWtCLEVBQUUsb3REQWtCdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLDg1Q0FXaUo7S0FDdEs7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxXQUFXLEVBQUUsa0JBQWtCO1FBQy9CLGtCQUFrQixFQUFFLDA1Q0FXdUQ7S0FDNUU7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLDAvQ0FRMEs7S0FDL0w7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDZCQUE2QjtRQUMvQyxXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLGtCQUFrQixFQUFFLGdoREFXNEg7S0FDako7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlCQUFpQjtRQUNuQyxXQUFXLEVBQUUsaUJBQWlCO1FBQzlCLGtCQUFrQixFQUFFLHd4Q0FZdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLGlDQUFpQztRQUNuRCxXQUFXLEVBQUUsaUNBQWlDO1FBQzlDLGtCQUFrQixFQUFFLGcyREFXdUc7S0FDNUg7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDhCQUE4QjtRQUNoRCxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLGtCQUFrQixFQUFFLG93REFTdUw7S0FDNU07SUFDRDtRQUNFLGdCQUFnQixFQUFFLDBCQUEwQjtRQUM1QyxXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLGtCQUFrQixFQUFFLHU1REFVdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHdDQUF3QztRQUMxRCxXQUFXLEVBQUUsd0NBQXdDO1FBQ3JELGtCQUFrQixFQUFFLDZ6Q0FldUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLCtCQUErQjtRQUNqRCxXQUFXLEVBQUUsK0JBQStCO1FBQzVDLGtCQUFrQixFQUFFLDh0REFRdUs7S0FDNUw7SUFDRDtRQUNFLGdCQUFnQixFQUFFLG9CQUFvQjtRQUN0QyxXQUFXLEVBQUUsb0JBQW9CO1FBQ2pDLGtCQUFrQixFQUFFLDI4REFTeUk7S0FDOUo7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLDR4REFVaUY7S0FDdEc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQyxXQUFXLEVBQUUseUJBQXlCO1FBQ3RDLGtCQUFrQixFQUFFLHVzREFxQnVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLGtCQUFrQixFQUFFLHExQ0FXdUY7S0FDNUc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHVCQUF1QjtRQUN6QyxXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLGtCQUFrQixFQUFFLHl2REFjeUY7S0FDOUc7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLG1xREFXdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDJCQUEyQjtRQUM3QyxXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLGtCQUFrQixFQUFFLHk3REFXdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLG9CQUFvQjtRQUN0QyxXQUFXLEVBQUUsb0JBQW9CO1FBQ2pDLGtCQUFrQixFQUFFLGdzRUFXdUM7S0FDNUQ7SUFDRDtRQUNFLGdCQUFnQixFQUFFLDhCQUE4QjtRQUNoRCxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLGtCQUFrQixFQUFFLDRsREFpQndDO0tBQzdEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxrQkFBa0IsRUFBRSwwdURBaUJ1QztLQUM1RDtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0Isa0JBQWtCLEVBQUUsdzNEQVlzSTtLQUMzSjtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsZUFBZTtRQUNqQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixrQkFBa0IsRUFBRSxzbURBVWtHO0tBQ3ZIO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxvQkFBb0I7UUFDdEMsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxrQkFBa0IsRUFBRSwwbkVBaUJ1UDtLQUM1UTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLFdBQVcsRUFBRSw2QkFBNkI7UUFDMUMsa0JBQWtCLEVBQUUsOC9EQWVnTDtLQUNyTTtJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMEJBQTBCO1FBQzVDLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsa0JBQWtCLEVBQUUsMm9HQXFCd0o7S0FDN0s7SUFDRDtRQUNFLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLGtCQUFrQixFQUFFLHEwREFrQnVDO0tBQzVEO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSx1QkFBdUI7UUFDekMsV0FBVyxFQUFFLG1DQUFtQztRQUNoRCxrQkFBa0IsRUFBRSwwcENBYzJKO0tBQ2hMO0lBQ0Q7UUFDRSxnQkFBZ0IsRUFBRSxrQ0FBa0M7UUFDcEQsV0FBVyxFQUFFLDJDQUEyQztRQUN4RCxrQkFBa0IsRUFBRSw2OURBNkJ3TjtLQUM3TztJQUNEO1FBQ0UsZ0JBQWdCLEVBQUUsMENBQTBDO1FBQzVELFdBQVcsRUFBRSwyQ0FBMkM7UUFDeEQsa0JBQWtCLEVBQUUsc3JEQWtCeU87S0FDOVA7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEFjdGlvblRheEZyYWdtZW50cyA9IFtcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpb3IgWWVhciBUYXggUmV0dXJuc1wiLFxuICAgIGFjdGlvblRpdGxlOiBgUHJvdmlkZSBQcmlvciBZZWFyIFRheCBSZXR1cm5zYCxcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIHJlcXVpcmUgeW91ciBhc3Npc3RhbmNlIHRvIGVuc3VyZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzLiBPbmUgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gd2UgbmVlZCBpcyB5b3VyIDxzdHJvbmc+UHJpb3IgWWVhciBUYXggUmV0dXJuczwvc3Ryb25nPi4gVGhpcyBkb2N1bWVudCBpcyBlc3NlbnRpYWwgZm9yIHNldmVyYWwgcmVhc29ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bzogdmVyaWZ5aW5nIGNhcnJ5LWZvcndhcmQgYW1vdW50cywgY29tcGFyaW5nIHllYXItb3Zlci15ZWFyIGluY29tZSBhbmQgZGVkdWN0aW9ucywgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0YXggbGF3cy48L3A+XG4gICAgPHA+VG8gZmFjaWxpdGF0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZzo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBjb3B5IG9mIHlvdXIgPHN0cm9uZz5GZWRlcmFsIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5BIGNvcHkgb2YgeW91ciA8c3Ryb25nPlN0YXRlIHRheCByZXR1cm48L3N0cm9uZz4gZm9yIHRoZSBsYXN0IHRheCB5ZWFyLCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5ub3RpY2VzIG9yIGFtZW5kbWVudHM8L3N0cm9uZz4gcmVsYXRlZCB0byB5b3VyIHByaW9yIHllYXIgdGF4IHJldHVybnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBkaWZmaWN1bHR5IGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBsZXQgdXMga25vdyBhcyBzb29uIGFzIHBvc3NpYmxlIHNvIHdlIGNhbiBkaXNjdXNzIGFsdGVybmF0aXZlIHNvbHV0aW9ucy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBQcm92aWRpbmcgdGhlc2Ugd2lsbCBlbmFibGUgdXMgdG8gY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gd2l0aG91dCBkZWxheS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU3RhdHV0b3J5IEV4dGVuc2lvbnNcIixcbiAgICBhY3Rpb25UaXRsZTogYERldGVybWluaW5nIEVsaWdpYmlsaXR5IGZvciBTdGF0dXRvcnkgRmlsaW5nIEV4dGVuc2lvbnNgLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IGRldGVybWluZSBpZiB5b3UgcXVhbGlmeSBmb3Igc3RhdHV0b3J5IGZpbGluZyBleHRlbnNpb25zIGZvciB5b3VyIHRheCByZXR1cm5zLCB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2Ugc2VlIGJlbG93IHRoZSBjYXRlZ29yaWVzIG9mIGluZm9ybWF0aW9uIG5lZWRlZCBiYXNlZCBvbiBkaWZmZXJlbnQgZWxpZ2liaWxpdHkgY3JpdGVyaWE6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmVkZXJhbCBEaXNhc3RlciBBcmVhczwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBwcmltYXJ5IHJlc2lkZW5jZSBsb2NhdGlvbiBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHJlY2VpdmVkIHJlZ2FyZGluZyBkaXNhc3RlciBkZWNsYXJhdGlvbnMgaW4geW91ciBhcmVhLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MaXZpbmcgQWJyb2FkPC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlByb29mIG9mIHJlc2lkZW5jZSBvdXRzaWRlIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gMzMwIGZ1bGwgZGF5cyB3aXRoaW4gYSAxMi1tb250aCBwZXJpb2QuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIHlvdXIgcGh5c2ljYWwgcHJlc2VuY2Ugb3IgYm9uYSBmaWRlIHJlc2lkZW5jZSBpbiBhIGZvcmVpZ24gY291bnRyeS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWN0aXZlIE1pbGl0YXJ5PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gaW5kaWNhdGluZyBhY3RpdmUgZHV0eSBzdGF0dXMsIGluY2x1ZGluZyBkYXRlcyBvZiBzZXJ2aWNlIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+SWYgYXBwbGljYWJsZSwgb3JkZXJzIGZvciBvdmVyc2VhcyBkZXBsb3ltZW50LjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db21iYXQgWm9uZTwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5PZmZpY2lhbCBvcmRlcnMgZGVtb25zdHJhdGluZyB5b3VyIGRlcGxveW1lbnQgdG8gYSBjb21iYXQgem9uZSwgaW5jbHVkaW5nIHRoZSBzcGVjaWZpYyBkYXRlcy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbnkgcmVsZXZhbnQgY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2Ugb3Igb3RoZXIgb2ZmaWNpYWwgYm9kaWVzIHJlZ2FyZGluZyB5b3VyIHNlcnZpY2UgaW4gYSBjb21iYXQgem9uZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB5b3UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIHRpbWVseSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGVwZW5kZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJlcXVlc3QgZm9yIERlcGVuZGVudCBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgZGVwZW5kZW50cy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhcHBseWluZyB0aGUgbW9zdCBiZW5lZmljaWFsIGRlcGVuZGVuY3kgdGVzdHMsIGluY2x1ZGluZyBxdWFsaWZpY2F0aW9ucyBmb3IgSGVhZCBvZiBIb3VzZWhvbGQgKEhPSCksIENoaWxkIFRheCBDcmVkaXQsIGFuZCBvdGhlciByZWxhdGVkIGJlbmVmaXRzLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggb2YgeW91ciBjbGFpbWVkIGRlcGVuZGVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RnVsbCBOYW1lOjwvc3Ryb25nPiBUaGUgY29tcGxldGUgbGVnYWwgbmFtZSBvZiB0aGUgZGVwZW5kZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyIChUSU4pOjwvc3Ryb25nPiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgaWRlbnRpZmljYXRpb24gcHVycG9zZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBCaXJ0aDo8L3N0cm9uZz4gSGVscHMgdG8gZGV0ZXJtaW5lIGVsaWdpYmlsaXR5IGZvciBjZXJ0YWluIGNyZWRpdHMgbGlrZSB0aGUgQ2hpbGQgVGF4IENyZWRpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZWxhdGlvbnNoaXAgdG8gWW91Ojwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBkZXBlbmRlbnQncyByZWxhdGlvbnNoaXAgKHNvbiwgZGF1Z2h0ZXIsIHN0ZXBjaGlsZCwgZm9zdGVyIGNoaWxkLCBicm90aGVyLCBzaXN0ZXIsIGV0Yy4pIHRvIHlvdS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3k6PC9zdHJvbmc+IENvbmZpcm0gdGhlIGRlcGVuZGVudCBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN1cHBvcnQ6PC9zdHJvbmc+IENvbmZpcm0geW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBkZXBlbmRlbnTigJlzIGZpbmFuY2lhbCBzdXBwb3J0IGZvciB0aGUgeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5DaXRpemVuc2hpcDo8L3N0cm9uZz4gQ29uZmlybSB0aGUgZGVwZW5kZW50IGlzIGEgVS5TLiBjaXRpemVuLCBVLlMuIG5hdGlvbmFsLCBvciBhIHJlc2lkZW50IGFsaWVuLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBkZXBlbmRlbnQgaXMgbWFycmllZCBhbmQsIGlmIHNvLCB3aGV0aGVyIHRoZXkgYXJlIGZpbGluZyBqb2ludGx5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkluY29tZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSBkZXRhaWxzIHJlZ2FyZGluZyBhbnkgaW5jb21lIHRoZSBkZXBlbmRlbnQgbWF5IGhhdmUgZWFybmVkIG9yIHJlY2VpdmVkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBpbmZvcm1hdGlvbiB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHRoZSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBmdXJ0aGVyIGFzc2lzdGFuY2UsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSGVhZCBvZiBIb3VzZWhvbGRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJIZWFkIG9mIEhvdXNlaG9sZCBGaWxpbmdcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCB0YXggZmlsaW5nIHVuZGVyIHRoZSBcIkhlYWQgb2YgSG91c2Vob2xkXCIgc3RhdHVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uLiBUaGlzIHN0YXR1cyBjYW4gcHJvdmlkZSBzaWduaWZpY2FudCB0YXggYmVuZWZpdHMsIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIElSUyByZXF1aXJlbWVudHMgYXJlIG1ldC4gUGxlYXNlIHByb3ZpZGU6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5NYXJpdGFsIFN0YXR1czo8L3N0cm9uZz4gQ29uZmlybWF0aW9uIG9mIHlvdXIgbWFyaXRhbCBzdGF0dXMgYXMgb2YgdGhlIGxhc3QgZGF5IG9mIHRoZSB0YXggeWVhciAoZS5nLiwgc2luZ2xlLCBkaXZvcmNlZCwgbGVnYWxseSBzZXBhcmF0ZWQpLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SG91c2Vob2xkIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxlZCByZWNvcmRzIGluZGljYXRpbmcgdGhhdCB5b3UgcGFpZCBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgY29zdHMgb2Yga2VlcGluZyB1cCBhIGhvbWUgZm9yIHRoZSB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyByZW50LCBtb3J0Z2FnZSBpbnRlcmVzdCwgcHJvcGVydHkgdGF4ZXMsIHV0aWxpdGllcywgcmVwYWlycywgbWFpbnRlbmFuY2UsIGFuZCBncm9jZXJpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5RdWFsaWZ5aW5nIFBlcnNvbjo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHF1YWxpZnlpbmcgcGVyc29uKHMpIHdobyBsaXZlZCB3aXRoIHlvdSBpbiB0aGUgaG9tZSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHllYXIsIGV4Y2VwdCBmb3IgdGVtcG9yYXJ5IGFic2VuY2VzIHN1Y2ggYXMgc2Nob29sLiBQbGVhc2UgaW5jbHVkZTpcbiAgICAgIDx1bD5cbiAgICAgIDxsaT5GdWxsIG5hbWUgYW5kIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIGNoaWxkLCBwYXJlbnQsIHNpYmxpbmcpLjwvbGk+XG4gICAgICA8bGk+RHVyYXRpb24gb2YgcmVzaWRlbmN5IGF0IHlvdXIgaG9tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+U3VwcG9ydGluZyBkb2N1bWVudHMgKGJpcnRoIGNlcnRpZmljYXRlcywgc2Nob29sIHJlY29yZHMsIGV0Yy4pIHByb3ZpbmcgdGhlIHJlc2lkZW5jeSBhbmQgcmVsYXRpb25zaGlwLjwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvbGk+XG4gICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBTdXBwb3J0Ojwvc3Ryb25nPiBBbnkgZnVydGhlciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgeW91ciBjbGFpbSBmb3IgdGhlIEhlYWQgb2YgSG91c2Vob2xkIGZpbGluZyBzdGF0dXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgcHJvdmlkaW5nIGFjY3VyYXRlIGFuZCBjb21wbGV0ZSBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIHlvdXIgYmVuZWZpdCBhbmQgdG8gY29tcGx5IHdpdGggdGF4IGxhd3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlc2lkZW5jeSBTdGF0dXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbmZvcm1hdGlvbiBvbiBSZXNpZGVuY3kgU3RhdHVzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGVpdGhlciB5b3Ugb3IgeW91ciBzcG91c2UgaXMgbm90IGEgVS5TLiBjaXRpemVuLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIHRheCBzdGF0dXMsIHdlIG5lZWQgdG8gYXBwbHkgdGhlIG5lY2Vzc2FyeSBUYXggUmVzaWRlbmN5IFRlc3RzLCB3aGljaCBpbmNsdWRlIHRoZSA8c3Ryb25nPkdyZWVuIENhcmQgVGVzdDwvc3Ryb25nPiBhbmQgdGhlIDxzdHJvbmc+U3Vic3RhbnRpYWwgUHJlc2VuY2UgVGVzdDwvc3Ryb25nPi4gVGhpcyB3aWxsIGhlbHAgdXMgZW5zdXJlIHlvdXIgdGF4IHJldHVybnMgYXJlIGNvbXBsZXRlZCBjb3JyZWN0bHkgYW5kIGNvbXBseSB3aXRoIFUuUy4gcmVndWxhdGlvbnMuPC9wPlxuXG4gICAgPHA+VG8gcHJvY2VlZCwgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkdyZWVuIENhcmQgU3RhdHVzOjwvc3Ryb25nPiBQbGVhc2UgY29uZmlybSBpZiB5b3Ugb3IgeW91ciBzcG91c2UgaGF2ZSBiZWVuIGlzc3VlZCBhIFUuUy4gZ3JlZW4gY2FyZCAoTGF3ZnVsIFBlcm1hbmVudCBSZXNpZGVudCBDYXJkKSBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSB0YXggeWVhci4gSWYgeWVzLCBwcm92aWRlIGEgY29weSBvZiB0aGUgZ3JlZW4gY2FyZCBvciB0aGUgb2ZmaWNpYWwgZG9jdW1lbnQgY29uZmlybWluZyB0aGUgc3RhdHVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgQXJyaXZhbCBpbiB0aGUgVS5TLjo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGVzIHdoZW4geW91IGFuZC9vciB5b3VyIHNwb3VzZSBmaXJzdCBhcnJpdmVkIGluIHRoZSBVLlMuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEhpc3Rvcnk6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgdGhlIGRhdGVzIHlvdSBhbmQvb3IgeW91ciBzcG91c2UgZW50ZXJlZCBhbmQgbGVmdCB0aGUgVS5TLiBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHRoZSBTdWJzdGFudGlhbCBQcmVzZW5jZSBUZXN0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlZpc2EgVHlwZTo8L3N0cm9uZz4gSWYgeW91IG9yIHlvdXIgc3BvdXNlIGFyZSBvbiBhIHZpc2EsIHBsZWFzZSBzcGVjaWZ5IHRoZSB0eXBlIGFuZCBwcm92aWRlIGEgY29weSBvZiB0aGUgdmlzYS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFRheCBGaWxpbmdzOjwvc3Ryb25nPiBDb3BpZXMgb2YgbGFzdCB5ZWFyJ3MgdGF4IHJldHVybnMsIGlmIGFwcGxpY2FibGUuIFRoaXMgaW5mb3JtYXRpb24gY2FuIHByb3ZpZGUgY29udGV4dCBhbmQgaGVscCBkZXRlcm1pbmUgcmVzaWRlbmN5IHN0YXR1cyBtb3JlIGFjY3VyYXRlbHkuPC9saT5cbiAgICA8L29sPlxuXG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhciBhbmQgbGVnaWJsZS4gWW91IGNhbiBzZW5kIHRoZW0gdG8gdXMgdmlhIGVtYWlsIG9yIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBGb3IgYW55IHF1ZXN0aW9ucyBvciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XG5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3Ugd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbi48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiSm9pbnQgVGF4IFJlbGllZlwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkpvaW50IFRheCBSZWxpZWYgRGV0YWlsc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRvIGFzc2lzdCB5b3UgZWZmZWN0aXZlbHkgd2l0aCB5b3VyIHJlcXVlc3QgZm9yIGpvaW50IHRheCByZWxpZWYsIHdlIG5lZWQgdG8gY29sbGVjdCBzcGVjaWZpYyBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIHlvdXIgc2l0dWF0aW9uIHRob3JvdWdobHkuIFRoaXMgd2lsbCBoZWxwIHVzIGRldGVybWluZSB0aGUgbW9zdCBzdWl0YWJsZSB0eXBlIG9mIHJlbGllZiBmb3IgeW91ciBjaXJjdW1zdGFuY2VzLCB3aGljaCBtYXkgaW5jbHVkZSBJbm5vY2VudCBTcG91c2UgUmVsaWVmLCBJbmp1cmVkIFNwb3VzZSBBbGxvY2F0aW9uLCBTZXBhcmF0aW9uIG9mIExpYWJpbGl0eSBSZWxpZWYsIG9yIEVxdWl0YWJsZSBSZWxpZWYuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+PHN0cm9uZz5Db21wbGV0ZSBUYXggUmV0dXJuczo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCB0YXggcmV0dXJucyBmb3IgdGhlIHllYXJzIHlvdSBhcmUgcmVxdWVzdGluZyByZWxpZWYuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudDo8L3N0cm9uZz4gQSB3cml0dGVuIHN0YXRlbWVudCBleHBsYWluaW5nIHdoeSB5b3UgYmVsaWV2ZSB5b3UgcXVhbGlmeSBmb3IgcmVsaWVmLCBpbmNsdWRpbmcgYW55IHNwZWNpZmljIGV2ZW50cyBvciBjaXJjdW1zdGFuY2VzIHlvdSB3YW50IHVzIHRvIGNvbnNpZGVyLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5JbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gUHJvb2Ygb2YgeW91ciBjdXJyZW50IGluY29tZSBhbmQgdGhhdCBvZiB5b3VyIHNwb3VzZSBpZiBhcHBsaWNhYmxlLCBzdWNoIGFzIHJlY2VudCBwYXkgc3R1YnMsIFctMiBmb3Jtcywgb3Igb3RoZXIgaW5jb21lIHN0YXRlbWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZpbmFuY2lhbCBTaXR1YXRpb246PC9zdHJvbmc+IERvY3VtZW50cyBzaG93aW5nIHlvdXIgY3VycmVudCBmaW5hbmNpYWwgc2l0dWF0aW9uLCBpbmNsdWRpbmcgYmFuayBzdGF0ZW1lbnRzLCBtb250aGx5IGJpbGxzLCBhbmQgYW55IG90aGVyIGxpYWJpbGl0aWVzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIE1hcml0YWwgU3RhdHVzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byBzZXBhcmF0aW9uLCBkaXZvcmNlLCBvciBhbm51bG1lbnQuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHRoYXQgcHJvdmUgd2hlcmUgZWFjaCBvZiB5b3UgaGFzIGxpdmVkIGR1cmluZyB0aGUgdGF4IHllYXJzIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5BbnkgQ29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgSVJTOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhbnkgbm90aWNlcyBvciBsZXR0ZXJzIGZyb20gdGhlIElSUyByZWdhcmRpbmcgeW91ciBqb2ludCB0YXggbGlhYmlsaXR5LCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwsIG9yIHVwbG9hZC4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHRvIHByb3ZpZGUsIGRvbid0IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHRoaXMgcHJvY2VzcyBjYW4gYmUgY29tcGxleCwgYnV0IHdlIGFyZSBoZXJlIHRvIGd1aWRlIHlvdSB0aHJvdWdoIGl0LiBPdXIgZ29hbCBpcyB0byBlbnN1cmUgd2UgaGF2ZSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB5b3VyIHNpdHVhdGlvbiB0byBhZHZvY2F0ZSBmb3IgdGhlIG1vc3QgZmF2b3JhYmxlIG91dGNvbWUgb24geW91ciBiZWhhbGYuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIjEwOTkgTkVDIEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIjEwOTkgTkVDIEluY29tZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCByZXF1aXJlIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGFsbCB5b3VyIHNvdXJjZXMgb2YgaW5jb21lLiBTcGVjaWZpY2FsbHksIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgeW91ciAxMDk5IE5FQyBJbmNvbWUuIFRoZSAxMDk5LU5FQyBmb3JtIGlzIGNydWNpYWwgZm9yIGNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBub24tZW1wbG95ZWUgY29tcGVuc2F0aW9uLjwvcD5cbiAgICA8cD5UbyBlbnN1cmUgYSB0aG9yb3VnaCBhbmQgYWNjdXJhdGUgdGF4IHByZXBhcmF0aW9uLCBwbGVhc2UgcHJvdmlkZSB1cyB3aXRoIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxiPkFsbCAxMDk5LU5FQyBmb3JtczwvYj4geW91IHJlY2VpdmVkIGZvciB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxiPmFkZGl0aW9uYWwgbm9uLWVtcGxveWVlIGNvbXBlbnNhdGlvbjwvYj4gbm90IHJlcG9ydGVkIG9uIGEgMTA5OS1ORUMgZm9ybS48L2xpPlxuICAgICAgICA8bGk+SW5mb3JtYXRpb24gcmVnYXJkaW5nIDxiPmV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciAxMDk5IE5FQyBpbmNvbWU8L2I+LCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBub3QgeWV0IHJlY2VpdmVkIGFsbCB5b3VyIDEwOTktTkVDIGZvcm1zLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCBwcm92aWRlIGFuIGVzdGltYXRlIG9mIHdoZW4geW91IGV4cGVjdCB0byByZWNlaXZlIHRoZW0uIFRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgaW5jb21lIGFuZCBhdm9pZGluZyBwb3RlbnRpYWwgcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPlxuICAgIDxwPlBsZWFzZSByZWFjaCBvdXQgdG8gdXMgZGlyZWN0bHkgc2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24uIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBwcm9jZXNzZWQgZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkuPC9wPlxuYCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2NoZWR1bGUgSy0xIEluZm9ybWF0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIGluZGljYXRlZCB0aGUgcHJlc2VuY2Ugb2YgU2NoZWR1bGUgSyBpbmNvbWUgZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBJbiBvcmRlciB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCBpdCBpcyBpbXBlcmF0aXZlIHRoYXQgd2UgZ2F0aGVyIGFsbCBuZWNlc3NhcnkgZG9jdW1lbnRzIHJlbGF0ZWQgdG8gdGhpcyBpbmNvbWUuPC9wPlxuICAgIDxwPklmIHdlIGFyZSBwcmVwYXJpbmcgeW91ciBidXNpbmVzcyByZXR1cm4sIHJlc3QgYXNzdXJlZCB0aGF0IHdlIHdpbGwgZ2VuZXJhdGUgdGhlIGFwcGxpY2FibGUgU2NoZWR1bGUgSy0xKHMpIGZvciB5b3VyIGJ1c2luZXNzIGludGVyZXN0cy4gSG93ZXZlciwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgY29sbGVjdCBjb3BpZXMgb2YgPHN0cm9uZz5hbGwgb3RoZXIgU2NoZWR1bGUgSy0xczwvc3Ryb25nPiB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgdG8gaW5jb3Jwb3JhdGUgaW50byB5b3VyIHBlcnNvbmFsIHRheCByZXR1cm4uPC9wPiAgXG4gICAgPGgzPlNwZWNpZmljIERvY3VtZW50IFJlcXVlc3Q6PC9oMz5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5BbnkgYW5kIGFsbCBTY2hlZHVsZSBLLTEocykgeW91IGhhdmUgcmVjZWl2ZWQgZnJvbTo8L2xpPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+UGFydG5lcnNoaXBzPC9saT5cbiAgICAgICAgICAgIDxsaT5TIENvcnBvcmF0aW9uczwvbGk+XG4gICAgICAgICAgICA8bGk+RXN0YXRlIG9yIFRydXN0czwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgPHN0cm9uZz5jbGVhciBhbmQgbGVnaWJsZTwvc3Ryb25nPiB0byBwcmV2ZW50IGFueSBkZWxheXMgaW4gcHJvY2Vzc2luZyB5b3VyIHJldHVybi4gWW91IG1heSBzdWJtaXQgdGhlc2UgZG9jdW1lbnRzIHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLCBvciBjb250YWN0IHVzIHRvIG1ha2UgYWx0ZXJuYXRpdmUgYXJyYW5nZW1lbnRzIGlmIG5lY2Vzc2FyeS48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFueSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiT3RoZXIgU2VsZi1FbXBsb3ltZW50IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFNlbGYtRW1wbG95bWVudCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdGhlIHByZXNlbmNlIG9mIHNlbGYtZW1wbG95bWVudCBpbmNvbWUgbm90IHJlcG9ydGVkIHRocm91Z2ggMTA5OS1ORUMgZm9ybXMgb3IgYSBTY2hlZHVsZSBLLTEuIFRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgYWNjdXJhdGUgYW5kIG1heGltaXplcyB5b3VyIGJlbmVmaXRzLCBpdCdzIGNydWNpYWwgd2UgZ2F0aGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBzb3VyY2VzIG9mIGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eTo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSB0aGUgbmF0dXJlIG9mIGVhY2ggYWN0aXZpdHkgZnJvbSB3aGljaCB5b3UgZGVyaXZlIHNlbGYtZW1wbG95bWVudCBpbmNvbWUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2Ygb3BlcmF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBzZWxmLWVtcGxveW1lbnQgYWN0aXZpdHksIHNwZWNpZnkgdGhlIGRhdGVzIG9yIHJhbmdlIG9mIGRhdGVzIGR1cmluZyB3aGljaCB5b3UgZWFybmVkIGluY29tZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBpbmNvbWUgZ2VuZXJhdGVkOjwvc3Ryb25nPiBGb3IgZWFjaCBhY3Rpdml0eSwgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IG9mIGluY29tZSBlYXJuZWQgYmVmb3JlIGFueSBleHBlbnNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBpbmN1cnJlZDo8L3N0cm9uZz4gTGlzdCBhbGwgZXhwZW5zZXMgcmVsYXRlZCB0byBlYWNoIHNlbGYtZW1wbG95bWVudCBhY3Rpdml0eS4gUGxlYXNlIGNhdGVnb3JpemUgdGhlc2UgZXhwZW5zZXMgKGUuZy4sIG9mZmljZSBzdXBwbGllcywgdHJhdmVsLCBhZHZlcnRpc2luZykuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVjb3JkcyBvciBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZXhpc3RpbmcgcmVjb3JkcyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY29ycm9ib3JhdGUgeW91ciBpbmNvbWUgYW5kIGV4cGVuc2VzLCBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IGFtb3VudCBvZiB0YXggeW91IG93ZSBhbmQgaWRlbnRpZnlpbmcgYW55IHBvdGVudGlhbCBkZWR1Y3Rpb25zIHRoYXQgY2FuIG1pbmltaXplIHlvdXIgdGF4IGxpYWJpbGl0eS4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHRpbWVseSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLCBhbmQgd2UgYXJlIGhlcmUgdG8gaGVscCBldmVyeSBzdGVwIG9mIHRoZSB3YXkuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveW1lbnQgV2FnZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3ltZW50IFdhZ2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBlbnRydXN0aW5nIHVzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybnMuIEFzIHBhcnQgb2Ygb3VyIGNvbXByZWhlbnNpdmUgcmV2aWV3IGFuZCBpbiBvdXIgcXVlc3QgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgd2FnZXMgZnJvbSBlbXBsb3ltZW50IG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuPC9wPlxuICAgIDxwPlRvIHByb2NlZWQgZWZmZWN0aXZlbHksIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGNvcGllcyBvZiBhbGwgVy0yIGZvcm1zIHJlY2VpdmVkIGZyb20geW91ciBlbXBsb3llcnMuIFRoaXMgaW5jbHVkZXMgd2FnZXMgZWFybmVkIGZyb20gYWxsIHNvdXJjZXMsIG5vdCBqdXN0IGZyb20gdGhlIFMtQ29ycG9yYXRpb24sIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VmVyaWZpY2F0aW9uIG9mIFMtQ29ycG9yYXRpb24gV2FnZXM6PC9zdHJvbmc+IElmIHdlIGFyZSBhbHNvIGhhbmRsaW5nIHlvdXIgYnVzaW5lc3MgdGF4ZXMgZm9yIGFuIFMtQ29ycG9yYXRpb24sIHdlIGxpa2VseSBoYXZlIHRoZSB3YWdlIGluZm9ybWF0aW9uIGZvciB0aGF0IGVudGl0eS4gSG93ZXZlciwgZm9yIHRob3JvdWdobmVzcyBhbmQgY29tcGxpYW5jZSwgcGxlYXNlIGNvbmZpcm0gaWYgdGhlIHdhZ2VzIGZyb20gdGhlIFMtQ29ycG9yYXRpb24gYXJlIGZ1bGx5IHJlcHJlc2VudGVkIGluIHRoZSBkb2N1bWVudHMgd2UgYWxyZWFkeSBob2xkLiBUaGlzIHdpbGwgaGVscCB1cyB2ZXJpZnkgdGhhdCBhbGwgaW5jb21lIGlzIGFjY3VyYXRlbHkgcmVwb3J0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWRkaXRpb25hbCBJbmNvbWUgRG9jdW1lbnRzOjwvc3Ryb25nPiBTaG91bGQgeW91IGhhdmUgb3RoZXIgc291cmNlcyBvZiB3YWdlIGluY29tZSAoZS5nLiwgY29udHJhY3Qgd29yaywgYm9udXNlcywgZXRjLikgbm90IGNvdmVyZWQgYnkgdGhlIFctMiBmb3JtcyBwcm92aWRlZCwgcGxlYXNlIGluY2x1ZGUgYW55IDEwOTkgZm9ybXMgb3Igb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBhIHNtb290aCBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBLaW5kbHkgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJvcGVydHkgb3IgU2VydmljZXMgTGlldSBXYWdlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlByb3BlcnR5L1NlcnZpY2VzIGluIExpZXUgb2YgV2FnZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgcHJvcGVydHkgYW5kL29yIHNlcnZpY2VzIGluIGxpZXUgb2YgdHJhZGl0aW9uYWwgd2FnZXMgZHVyaW5nIHRoZSB0YXggeWVhci4gVGhpcyB0eXBlIG9mIGNvbXBlbnNhdGlvbiBjb25zdGl0dXRlcyB0YXhhYmxlIGluY29tZSBhbmQgbXVzdCBiZSBhY2N1cmF0ZWx5IHJlcG9ydGVkIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgZnVsbHkgY29tcGxpYW50IHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5UbyBhY2N1cmF0ZWx5IHJlY29nbml6ZSBhbmQgcmVwb3J0IHRoZXNlIGl0ZW1zIGFzIHRheGFibGUgaW5jb21lLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBQcm9wZXJ0eSBvciBTZXJ2aWNlczo8L3N0cm9uZz4gUHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGFueSBwcm9wZXJ0eSBvciBzZXJ2aWNlcyB5b3UgcmVjZWl2ZWQuIFBsZWFzZSBpbmNsdWRlIHBoeXNpY2FsIGNoYXJhY3RlcmlzdGljcyBmb3IgcHJvcGVydHkgb3IgdGhlIHNjb3BlIG9mIHNlcnZpY2VzIHJlbmRlcmVkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+RmFpciBNYXJrZXQgVmFsdWUgYXQgVGltZSBvZiBSZWNlaXB0Ojwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBwcm9wZXJ0eSBvciBzZXJ2aWNlIGF0IHRoZSB0aW1lIHlvdSByZWNlaXZlZCBpdC4gSWYgeW91IGhhdmUgYW55IGFwcHJhaXNhbHMgb3IgZG9jdW1lbnRzIHRvIHN1cHBvcnQgdGhlIEZNViwgcGxlYXNlIGluY2x1ZGUgdGhlbS48L2xpPlxuICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb3IgQWdyZWVtZW50czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZG9jdW1lbnRhdGlvbiBvciB3cml0dGVuIGFncmVlbWVudHMgdGhhdCBkZXRhaWwgdGhlIGFycmFuZ2VtZW50IGZvciByZWNlaXZpbmcgcHJvcGVydHkgb3Igc2VydmljZXMgaW4gbGlldSBvZiB3YWdlcy4gVGhpcyBjYW4gaW5jbHVkZSBjb250cmFjdHMsIGVtYWlscywgb3IgYW55IGZvcm0gb2YgY29tbXVuaWNhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUocykgb24gd2hpY2ggeW91IHJlY2VpdmVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkVtcGxveWVyL1Byb3ZpZGVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IHByb3ZpZGVkIHRoZSBwcm9wZXJ0eSBvciBzZXJ2aWNlcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBhY2N1cmF0ZSBhbmQgY29tcGxldGUgYXMgcG9zc2libGUuIEluY29tcGxldGUgb3IgaW5hY2N1cmF0ZSBpbmZvcm1hdGlvbiBtYXkgbGVhZCB0byBkZWxheXMgaW4gdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBvciBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhlIElSUy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gcmVnYXJkaW5nIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gWW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBjcml0aWNhbCBmb3IgdGhlIHRpbWVseSBhbmQgYWNjdXJhdGUgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVtcGxveWVlIEFjY291bnRhYmxlIFBsYW5cIixcbiAgICBhY3Rpb25UaXRsZTogXCJFbXBsb3llZSBBY2NvdW50YWJsZSBQbGFuXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGljZWQgeW91J3ZlIG1lbnRpb25lZCBiZWluZyByZWltYnVyc2VkIGZvciBjZXJ0YWluIGV4cGVuc2VzIHVuZGVyIGFuIEVtcGxveWVlIEFjY291bnRhYmxlIFBsYW4uIFRvIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcmVpbWJ1cnNlbWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkEgY29weSBvZiB0aGUgZm9ybWFsIHdyaXR0ZW4gQWNjb3VudGFibGUgUGxhbiBwcm92aWRlZCBieSB5b3VyIGVtcGxveWVyLiBUaGlzIHNob3VsZCBvdXRsaW5lIHRoZSBleHBlbnNlIGFsbG93YW5jZSBhbmQgdGhlIHNwZWNpZmljcyBvZiB0aGUgcmVpbWJ1cnNlbWVudCBwb2xpY3kuPC9saT5cbiAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIGZyb20geW91ciBlbXBsb3llciBjb25maXJtaW5nIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxuICAgICAgICA8bGk+RGV0YWlscyBvZiB0aGUgZXhwZW5zZXMgcmVpbWJ1cnNlZCB1bmRlciB0aGUgcGxhbiwgaW5jbHVkaW5nIGRhdGVzLCBhbW91bnRzLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIGV4cGVuc2UgKHJlY2VpcHRzIG9yIGludm9pY2VzKSBwcm92aWRlZCB0byB5b3VyIGVtcGxveWVyIGZvciByZWltYnVyc2VtZW50IHVuZGVyIHRoZSBwbGFuLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIG9yIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIHRoZSByZWltYnVyc2VtZW50cyBvciB0aGUgQWNjb3VudGFibGUgUGxhbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHNlbmQgdXMgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB3ZSBjYW4gcHJvY2VlZCBzbW9vdGhseSB3aXRoIHlvdXIgdGF4IHJldHVybiBwcmVwYXJhdGlvbi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVGF4YWJsZSBGcmluZ2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgZW5zdXJpbmcgYWxsIGZvcm1zIG9mIGNvbXBlbnNhdGlvbiwgaW5jbHVkaW5nIHRheGFibGUgZnJpbmdlIGJlbmVmaXRzLCBhcmUgYWNjdXJhdGVseSByZXBvcnRlZCBvbiB5b3VyIHRheCByZXR1cm5zLiBCYXNlZCBvbiBvdXIgcHJldmlvdXMgY29tbXVuaWNhdGlvbiwgaXQgYXBwZWFycyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQgYmVuZWZpdHMgdGhhdCBuZWVkIHRvIGJlIHJldmlld2VkIGZ1cnRoZXIuIFRvIGFzc2lzdCB5b3UgcHJvcGVybHksIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBkZXRhaWxzOjwvcD5cbjxvbD5cbiAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgZWFjaCBiZW5lZml0IHJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmcmluZ2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21wYW55IGNhcnMsIG1lbWJlcnNoaXBzLCBlZHVjYXRpb25hbCBhc3Npc3RhbmNlLCBldGMuPC9saT5cbiAgPGxpPjxzdHJvbmc+VmFsdWUgb2YgZWFjaCBiZW5lZml0Ojwvc3Ryb25nPiBUaGUgZmFpciBtYXJrZXQgdmFsdWUgKEZNVikgb2YgZWFjaCBiZW5lZml0LiBJZiB5b3UncmUgdW5zdXJlLCBwbGVhc2UgcHJvdmlkZSBhbiBlc3RpbWF0ZSBhbmQgdGhlIGJhc2lzIGZvciB0aGlzIGVzdGltYXRlLjwvbGk+XG4gIDxsaT48c3Ryb25nPkFueSBhbW91bnRzIGNvbnRyaWJ1dGVkIGJ5IHlvdTo8L3N0cm9uZz4gSWYgeW91IG1hZGUgY29udHJpYnV0aW9ucyB0b3dhcmQgdGhlIGNvc3Qgb2YgYW55IGJlbmVmaXQsIHBsZWFzZSBzcGVjaWZ5IHRoZSBhbW91bnRzIGFuZCBmb3Igd2hpY2ggYmVuZWZpdHMuPC9saT5cbiAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cbiAgPGxpPjxzdHJvbmc+RGF0ZXM6PC9zdHJvbmc+IFRoZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBzcGVjaWZpYyBkYXRlcyBpZiBwb3NzaWJsZS48L2xpPlxuICA8bGk+PHN0cm9uZz5FbXBsb3llciBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGVtcGxveWVyKHMpIHByb3ZpZGluZyB0aGVzZSBiZW5lZml0cy48L2xpPlxuPC9vbD5cbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSB2YWx1ZSBvZiB0aGVzZSBmcmluZ2UgYmVuZWZpdHMgYW5kIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG48cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgbG9vayBmb3J3YXJkIHRvIGFzc2lzdGluZyB5b3UgZnVydGhlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uIFRheGFibGUgRnJpbmdlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGZpbmFsaXppbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIGlkZW50aWZpZWQgcG90ZW50aWFsIG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB0aGF0IG1heSBhcHBseSB0byB5b3VyIHNpdHVhdGlvbi4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgb3B0aW1pemUgeW91ciB0YXggb3V0Y29tZSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IG5vbi10YXhhYmxlIGZyaW5nZSBiZW5lZml0cyB5b3UgbWF5IGhhdmUgcmVjZWl2ZWQ6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIGVhY2ggYmVuZWZpdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgbm9uLXRheGFibGUgZnJpbmdlIGJlbmVmaXRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgbWF5IGluY2x1ZGUgaGVhbHRoIHNhdmluZ3MgYWNjb3VudHMgKEhTQXMpLCBlbXBsb3llZSBkaXNjb3VudHMsIHB1YmxpYyB0cmFuc2l0IHBhc3NlcywgZXRjLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5WYWx1ZSBvZiBlYWNoIGJlbmVmaXQ6PC9zdHJvbmc+IFRoZSBmYWlyIG1hcmtldCB2YWx1ZSAoRk1WKSBvZiBlYWNoIGJlbmVmaXQuIEZvciBub24tdGF4YWJsZSBiZW5lZml0cywgdGhpcyBoZWxwcyBpbiByZWNvcmQta2VlcGluZyBhbmQgY29uZmlybWluZyBleGVtcHRpb24gc3RhdHVzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Db250cmlidXRpb24gYW1vdW50cywgaWYgYW55Ojwvc3Ryb25nPiBJZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0b3dhcmRzIGFueSBvZiB0aGVzZSBiZW5lZml0cywgaW5kaWNhdGUgdGhlIGFtb3VudHMgYW5kIGZvciB3aGljaCBiZW5lZml0cy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QmVuZWZpdCBkb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgZG9jdW1lbnRhdGlvbiB0aGF0IGNhbiBjb3Jyb2JvcmF0ZSB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQsIHN1Y2ggYXMgc3RhdGVtZW50cywgYWdyZWVtZW50cywgb3IgcmVjZWlwdHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSB0aW1lZnJhbWUgZHVyaW5nIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBiZW5lZml0cy4gSW5jbHVkZSBhcyBwcmVjaXNlIGRhdGVzIGFzIHBvc3NpYmxlLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBvciBwcm92aWRlciBpbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG5hbWUgYW5kIGNvbnRhY3QgZGV0YWlscyBvZiB0aGUgZW1wbG95ZXIocykgb3IgdGhpcmQtcGFydHkgcHJvdmlkZXIocykgb2ZmZXJpbmcgdGhlc2UgYmVuZWZpdHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uIGhlbHBzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IGZpbGluZ3MgYXJlIGFjY3VyYXRlIGFuZCB0aGF0IHlvdSByZWNlaXZlIHRoZSBmdWxsIGFkdmFudGFnZSBvZiBub24tdGF4YWJsZSBmcmluZ2UgYmVuZWZpdHMuIFBsZWFzZSBsZXQgdXMga25vdyBpZiB5b3UgbmVlZCBhbnkgaGVscCBpZGVudGlmeWluZyBvciBkb2N1bWVudGluZyB0aGVzZSBiZW5lZml0cy48L3A+XG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBjb21wbGV0ZSB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJWZXRlcmFuIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVkEgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnQgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IHJldHVybiwgd2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIFZldGVyYW4gQmVuZWZpdHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uPC9wPlxuICAgIDxwPlRvIGFzc2lzdCB1cyBpbiB0aGlzIHRhc2ssIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkEgZGV0YWlsZWQgbGlzdCBvZiB0aGUgVmV0ZXJhbiBCZW5lZml0cyB5b3UgcmVjZWl2ZWQsIGluY2x1ZGluZyBhbnkgZGlzYWJpbGl0eSwgZWR1Y2F0aW9uLCBhbmQgcGVuc2lvbiBiZW5lZml0cy48L2xpPlxuICAgICAgICA8bGk+T2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCB0eXBlIG9mIGJlbmVmaXQgcmVjZWl2ZWQsIHN1Y2ggYXMgYXdhcmQgbGV0dGVycyBvciBzdGF0ZW1lbnRzIGZyb20gdGhlIERlcGFydG1lbnQgb2YgVmV0ZXJhbnMgQWZmYWlycyAoVkEpLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgY29ycmVzcG9uZGVuY2UgZnJvbSB0aGUgVkEgb3Igb3RoZXIgcmVsZXZhbnQgZW50aXRpZXMgcmVnYXJkaW5nIHRoZSB0YXhhYmlsaXR5IG9mIHlvdXIgYmVuZWZpdHMuPC9saT5cbiAgICAgICAgPGxpPlRvdGFsIGFtb3VudCByZWNlaXZlZCBmb3IgZWFjaCBiZW5lZml0IHRocm91Z2hvdXQgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5Bbnkgb3RoZXIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHByb3ZpZGUgY2xhcml0eSBvbiB0aGUgbmF0dXJlIGFuZCBhbW91bnQgb2YgeW91ciBWZXRlcmFuIEJlbmVmaXRzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHdoaWNoIGJlbmVmaXRzIGFyZSB0YXhhYmxlIGFuZCBlbnN1cmluZyB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBQbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZlIEluc3VyYW5jZSBQYXltZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkxpZmUgSW5zdXJhbmNlIFBheW1lbnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIG1lbnRpb24gb2YgcmVjZWl2aW5nIGxpZmUgaW5zdXJhbmNlIHBheW1lbnRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgdGhlc2UgcHJvY2VlZHMgYXJlIGluZGVlZCBub24tdGF4YWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHJlY2VpdmVkIGZyb20gbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9yIHN0YXRlbWVudHMgcGVydGFpbmluZyB0byB0aGUgbGlmZSBpbnN1cmFuY2UgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT5UaGUgbmFtZSBvZiB0aGUgaW5zdXJlZCBpbmRpdmlkdWFsIGFuZCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XG4gICAgICA8bGk+QW55IGNvbW11bmljYXRpb25zIG9yIGxldHRlcnMgZnJvbSB0aGUgaW5zdXJhbmNlIGNvbXBhbnkgcmVnYXJkaW5nIHRoZSB0YXggc3RhdHVzIG9mIHRoZXNlIHBheW1lbnRzLjwvbGk+XG4gICAgICA8bGk+RGV0YWlscyByZWdhcmRpbmcgaWYgdGhlIHBvbGljeSB3YXMgcHVyY2hhc2VkIHdpdGggYWZ0ZXItdGF4IG9yIHByZS10YXggZG9sbGFycy48L2xpPlxuICAgICAgPGxpPklmIGFueSBwb3J0aW9uIG9mIHRoZSBsaWZlIGluc3VyYW5jZSBwYXltZW50IHdhcyBhbiBpbnZlc3RtZW50IHJldHVybiwgcGxlYXNlIHByb3ZpZGUgcmVsYXRlZCBkb2N1bWVudHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdXMgdG8gZ3VhcmFudGVlIHRoZSBhY2N1cmFjeSBhbmQgaW50ZWdyaXR5IG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJNZWRpY2FyZSBXYWl2ZXIgUGF5bWVudHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zLCB3ZSBub3RlZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIE1lZGljYXJlIFdhaXZlciBQYXltZW50cyB1bmRlciB0aGUgZGlmZmljdWx0eS1vZi1jYXJlIHByb3Zpc2lvbnMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gZW5zdXJlIHdlIG1heGltaXplIHlvdXIgZWxpZ2libGUgaW5jb21lIGV4Y2x1c2lvbnMsIGl0J3MgY3J1Y2lhbCB3ZSB2ZXJpZnkgY2VydGFpbiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBsaXZpbmcgYXJyYW5nZW1lbnQsIGFzIHBlciBJUlMgZ3VpZGVsaW5lcy48L3A+XG4gICAgPHA+VG8gYXNzaXN0IHVzIGluIGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBwYXltZW50cyBxdWFsaWZ5IGZvciBpbmNvbWUgZXhjbHVzaW9uLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jZTo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgdGhhdCB5b3UgYW5kIHRoZSBpbmRpdmlkdWFsIHVuZGVyIGNhcmUgc2hhcmVkIHRoZSBzYW1lIHByaW1hcnkgcmVzaWRlbmNlIGR1cmluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBwYXltZW50cy4gVGhpcyBjb3VsZCBpbmNsdWRlIHV0aWxpdHkgYmlsbHMsIGEgcmVudGFsIGFncmVlbWVudCwgb3IgaG9tZW93bmVyJ3MgaW5zdXJhbmNlIGluIGJvdGggb2YgeW91ciBuYW1lcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBDYXJlIFJlY2lwaWVudDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNvbiByZWNlaXZpbmcgY2FyZSwgaW5jbHVkaW5nIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgYW5kIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgaWRlbnRpZmllcyB0aGVpciBuZWVkIGZvciBjYXJlIChlLmcuLCBhIGxldHRlciBmcm9tIGEgaGVhbHRoY2FyZSBwcm92aWRlcikuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgcmVjb3JkcyBvZiB0aGUgTWVkaWNhcmUgV2FpdmVyIFBheW1lbnRzIHlvdSByZWNlaXZlZCwgYXMgdGhpcyB3aWxsIGhlbHAgdXMgZGV0ZXJtaW5lIHRoZSBleGFjdCBhbW91bnRzIGFuZCB0aGUgcGVyaW9kcyBjb3ZlcmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBGb3JtYWwgQWdyZWVtZW50cyBvciBDb250cmFjdHM6PC9zdHJvbmc+IElmIHRoZXJlIHdhcyBhIGZvcm1hbCBhZ3JlZW1lbnQgb3IgY29udHJhY3QgZGV0YWlsaW5nIHRoZSBjYXJlIHByb3ZpZGVkLCBwbGVhc2UgaW5jbHVkZSB0aGlzIGFzIHdlbGwuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgdGhlIGNhcmUgYXJyYW5nZW1lbnQgd2FzIGZhY2lsaXRhdGVkIHRocm91Z2ggYSBzdGF0ZSBvciB0aGlyZC1wYXJ0eSBhZ2VuY3kuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgdG8gZW5zdXJlIHdlIGNvbXBseSB3aXRoIHRheGluZyBhdXRob3JpdGllcyB3aGlsZSBhY2N1cmF0ZWx5IHJlZmxlY3RpbmcgeW91ciBmaW5hbmNlcy4gSWYgYW55IG9mIHRoZXNlIHJlcXVpcmVtZW50cyBwb3NlIGEgZGlmZmljdWx0eSBvciBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LiBPdXIgZ29hbCBpcyB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2VzcyBhbmQgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNhYmlsaXR5IEluc3VyYW5jZSBCZW5lZml0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRpc2FiaWxpdHkgSW5zdXJhbmNlIEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IHJlY2VpdmVkIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIGlmIHRoZXNlIGJlbmVmaXRzIGFyZSBlbGlnaWJsZSB0byBiZSBleGNsdWRlZCBmcm9tIHlvdXIgaW5jb21lLCB3ZSByZXF1aXJlIGZ1cnRoZXIgZGV0YWlscyByZWdhcmRpbmcgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyBwYWlkLjwvcD5cbiAgICA8cD5LaW5kbHkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+RGV0YWlsZWQgc3RhdGVtZW50cyBvciBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGRpc2FiaWxpdHkgaW5zdXJhbmNlIGJlbmVmaXRzIHJlY2VpdmVkLjwvbGk+XG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gb24gd2hvIHBhaWQgdGhlIGluc3VyYW5jZSBwcmVtaXVtcyAoeW91IG9yIHlvdXIgZW1wbG95ZXIpLjwvbGk+XG4gICAgICAgIDxsaT5JZiB5b3UgaGF2ZSBjb250cmlidXRlZCB0byB0aGUgcGF5bWVudCBvZiB0aGUgcHJlbWl1bXM6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBhbW91bnQgeW91IHBhaWQgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IHN1cHBvcnRpbmcgZG9jdW1lbnRzIGZvciB0aGUgcGF5bWVudHMgbWFkZSBieSB5b3UgKHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cykuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5JZiB5b3VyIGVtcGxveWVyIGNvbnRyaWJ1dGVkIHRvIHRoZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtczpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCBwYWlkIGJ5IHlvdXIgZW1wbG95ZXIgdG93YXJkcyB0aGUgcHJlbWl1bXMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGRvY3VtZW50cyBpbmRpY2F0aW5nIGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgKHBheSBzdHVicywgZW1wbG95ZXIgbGV0dGVycykuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGRldGVybWluZSB0aGUgdGF4YWJsZSBwb3J0aW9uLCBpZiBhbnksIG9mIHlvdXIgZGlzYWJpbGl0eSBpbnN1cmFuY2UgYmVuZWZpdHMuIFByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHlvdXIgdGF4IGZpbGluZyBhbmQgcG90ZW50aWFsbHkgbG93ZXIgeW91ciB0YXhhYmxlIGluY29tZS48L3A+XG4gICAgPHA+UGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB3ZSBjYW4gYmUgb2YgZnVydGhlciBhc3Npc3RhbmNlLiBXZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzYWJpbGl0eSBSZXRpcmVtZW50IEJlbmVmaXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIGR1cmluZyB0aGUgdGF4IHllYXIuIEluIG9yZGVyIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoZXNlIGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscy4gVGhlIHRheGFiaWxpdHkgb2YgdGhlc2UgYmVuZWZpdHMgY2FuIGRlcGVuZCBvbiB3aGVuIHlvdSB0b29rIHJldGlyZW1lbnQgZHVlIHRvIGRpc2FiaWxpdHkuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJldGlyZW1lbnQ6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHlvdSByZXRpcmVkIGR1ZSB0byBkaXNhYmlsaXR5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgRGlzYWJpbGl0eSBSZXRpcmVtZW50Ojwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgaGF2ZSB0aGF0IGNvbmZpcm1zIHlvdXIgcmV0aXJlbWVudCB3YXMgZHVlIHRvIGRpc2FiaWxpdHkuIFRoaXMgbWF5IGluY2x1ZGUgbGV0dGVycyBmcm9tIHlvdXIgZW1wbG95ZXIsIHRoZSByZXRpcmVtZW50IHBsYW4sIG9yIG1lZGljYWwgcmVjb3Jkcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIEJlbmVmaXRzIFJlY2VpdmVkOjwvc3Ryb25nPiBTcGVjaWZpYyBhbW91bnRzIGFuZCB0aGUgc291cmNlIG9mIHRoZSBkaXNhYmlsaXR5IHJldGlyZW1lbnQgYmVuZWZpdHMuIFBsZWFzZSBpbmNsdWRlIGFueSByZWxhdGVkIGRvY3VtZW50cyBzdWNoIGFzIHN0YXRlbWVudHMgb3Igbm90aWNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFyIFctMiBvciAxMDk5IEZvcm1zOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgYW55IHdhZ2VzIG9yIGRpc2FiaWxpdHkgcGF5bWVudHMgdGhhdCB3ZXJlIHJlcG9ydGVkIG9uIFctMiBvciAxMDk5IGZvcm1zIGluIHRoZSB5ZWFyIG9mIHlvdXIgcmV0aXJlbWVudCwgcGxlYXNlIHByb3ZpZGUgdGhlc2UgZm9ybXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IENvcnJlc3BvbmRlbmNlIGZyb20gdGhlIElSUzo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjZWl2ZWQgYW55IG5vdGljZXMgb3IgbGV0dGVycyBmcm9tIHRoZSBJUlMgcmVnYXJkaW5nIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzLCBwbGVhc2UgaW5jbHVkZSBjb3BpZXMgb2YgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoZSBhYm92ZSBpbmZvcm1hdGlvbiBpcyB2aXRhbCB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZS4gVW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgZGlzYWJpbGl0eSByZXRpcmVtZW50IGJlbmVmaXRzIHdpbGwgYWlkIHVzIGluIGRldGVybWluaW5nIHRoZWlyIHRheGFiaWxpdHkgYW5kIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggb2JsaWdhdGlvbnMgYXJlIHByZWNpc2VseSBjYWxjdWxhdGVkLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgaGlnaGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDbGVyZ3kgV2FnZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDbGVyZ3kgV2FnZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQgVy0yIHdhZ2VzIGFzIGEgY2xlcmd5IG1lbWJlci4gVG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIHJlcXVpcmUgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGNvbXBlbnNhdGlvbiBwYWNrYWdlLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+Vy0yIEZvcm06PC9iPiBJZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgaW5jbHVkZSBhbnkgVy0yIGZvcm1zIGlzc3VlZCBieSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbi48L2xpPlxuICAgICAgICA8bGk+PGI+SG91c2luZyBBbGxvd2FuY2UgRG9jdW1lbnRhdGlvbjo8L2I+IERldGFpbGVkIHN0YXRlbWVudCBvciBsZXR0ZXIgZnJvbSB5b3VyIHJlbGlnaW91cyBpbnN0aXR1dGlvbiBzcGVjaWZ5aW5nIHRoZSBhbW91bnQgZGVzaWduYXRlZCBhcyBob3VzaW5nIGFsbG93YW5jZS48L2xpPlxuICAgICAgICA8bGk+PGI+U2VsZi1FbXBsb3ltZW50IFRheDo8L2I+IENvbmZpcm1hdGlvbiBvbiB3aGV0aGVyIHlvdSBoYXZlIHRha2VuIGEgdm93IG9mIHBvdmVydHkgKGlmIGFwcGxpY2FibGUpLCBvciBhbnkgZG9jdW1lbnRhdGlvbiByZWxhdGVkIHRvIG9wdGluZyBvdXQgb2Ygc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxuICAgICAgICA8bGk+PGI+RXhwZW5zZSBSZWltYnVyc2VtZW50czo8L2I+IERvY3VtZW50YXRpb24gc2hvd2luZyBhbnkgZXhwZW5zZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB1bmRlciBhbiBhY2NvdW50YWJsZSBwbGFuLjwvbGk+XG4gICAgICAgIDxsaT48Yj5PdGhlciBDb21wZW5zYXRpb246PC9iPiBJbmZvcm1hdGlvbiBvbiBhbnkgb3RoZXIgY29tcGVuc2F0aW9uIHJlY2VpdmVkIGluIHlvdXIgY2FwYWNpdHkgYXMgY2xlcmd5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvdmUgb2ZmZXJpbmdzLCBmZWVzIGZvciBzZXJ2aWNlcyAod2VkZGluZ3MsIGZ1bmVyYWxzLCBldGMuKSwgYW5kIHBhcnNvbmFnZSBhbGxvd2FuY2VzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIGFjY3VyYXRlbHkgcmVwcmVzZW50IHlvdXIgZWFybmluZ3MgYW5kIHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgY29ycmVjdGx5LiBZb3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IHdpbGwgaGVscCBlbnN1cmUgdGhhdCB5b3VyIHRheCByZXR1cm5zIGFyZSBwcmVwYXJlZCBpbiBhIHRpbWVseSBhbmQgZWZmaWNpZW50IG1hbm5lci48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnRlcmVzdCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbnRlcmVzdCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiByZXZpZXdpbmcgeW91ciBmaW5hbmNpYWwgYWN0aXZpdGllcyBmb3IgdGhlIHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHJlY2VpdmluZyBpbnRlcmVzdCBpbmNvbWUuIFRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXhhYmlsaXR5IG9mIHRoaXMgaW5jb21lIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBhZGRpdGlvbmFsIGRldGFpbHMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48Yj5Tb3VyY2Ugb2YgSW50ZXJlc3QgSW5jb21lOjwvYj4gUGxlYXNlIHNwZWNpZnkgdGhlIGluc3RpdHV0aW9uKHMpIG9yIGVudGl0eShpZXMpIGZyb20gd2hpY2ggeW91IHJlY2VpdmVkIGludGVyZXN0IGluY29tZSAoZS5nLiwgYmFua3MsIGNyZWRpdCB1bmlvbnMpLjwvbGk+XG4gICAgICA8bGk+PGI+QW1vdW50IFJlY2VpdmVkOjwvYj4gQ29uZmlybSB0aGUgdG90YWwgYW1vdW50IG9mIGludGVyZXN0IGluY29tZSByZWNlaXZlZCBmcm9tIGVhY2ggc291cmNlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgIDxsaT48Yj5BY2NvdW50IFR5cGVzOjwvYj4gSWRlbnRpZnkgdGhlIHR5cGUgb2YgYWNjb3VudHMgdGhhdCBnZW5lcmF0ZWQgdGhlIGludGVyZXN0IChlLmcuLCBzYXZpbmdzLCBjaGVja2luZywgY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQpLjwvbGk+XG4gICAgICA8bGk+PGI+VGF4IEZvcm1zIFJlY2VpdmVkOjwvYj4gTGlzdCBhbnkgdGF4IGZvcm1zIHlvdSBoYXZlIHJlY2VpdmVkIHJlbGF0ZWQgdG8gaW50ZXJlc3QgaW5jb21lLCBzdWNoIGFzIEZvcm0gMTA5OS1JTlQgb3IgRm9ybSAxMDk5LU9JRC48L2xpPlxuICAgICAgPGxpPjxiPkZvcmVpZ24gSW50ZXJlc3Q6PC9iPiBJZiBhbnkgaW50ZXJlc3QgaW5jb21lIHdhcyBlYXJuZWQgZnJvbSBmb3JlaWduIGFjY291bnRzIG9yIHNvdXJjZXMsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMsIGluY2x1ZGluZyB0aGUgY291bnRyeSBvZiBvcmlnaW4uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlByb3ZpZGluZyB0aGVzZSBkZXRhaWxzIHdpbGwgZW5hYmxlIHVzIHRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgaW50ZXJlc3QgaW5jb21lIGFuZCBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGNvbXBsZXRlIGFuZCBjb3JyZWN0LiBZb3UgY2FuIGF0dGFjaCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYnkgcmVwbHlpbmcgdG8gdGhpcyBlbWFpbCBvciB1cGxvYWRpbmcgdGhlbSBkaXJlY3RseSB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJhbmsgQWNjb3VudCBPcGVuaW5nIEdpZnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQmFuayBBY2NvdW50IE9wZW5pbmcgR2lmdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcmV2aWV3aW5nIHlvdXIgdGF4IHNpdHVhdGlvbiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSByZWNlaXZlZCBhIGdpZnQgZm9yIG9wZW5pbmcgYW4gYWNjb3VudCBhdCBhIGZpbmFuY2lhbCBpbnN0aXR1dGlvbi4gVG8gYWNjdXJhdGVseSBkZXRlcm1pbmUgdGhlIHRheGFiaWxpdHkgb2YgdGhpcyBpbmNvbWUsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPlRoZSBuYW1lIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb24gd2hlcmUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxuICAgICAgICA8bGk+VGhlIGRhdGUgdGhlIGFjY291bnQgd2FzIG9wZW5lZC48L2xpPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZ2lmdCByZWNlaXZlZCAoZS5nLiwgY2FzaCwgbWVyY2hhbmRpc2UsIG9yIHNlcnZpY2VzKS48L2xpPlxuICAgICAgICA8bGk+VGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHRoZSBnaWZ0IGF0IHRoZSB0aW1lIGl0IHdhcyByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+QW55IGRvY3VtZW50YXRpb24gcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlIGdpZnQgKGUuZy4sIGEgbGV0dGVyLCBlbWFpbCBjb25maXJtYXRpb24sIG9yIHN0YXRlbWVudCBpbmRpY2F0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZ2lmdCkuPC9saT5cbiAgICAgICAgPGxpPkNvbmZpcm1hdGlvbiBpZiB5b3UgaGF2ZSByZWNlaXZlZCBtb3JlIHRoYW4gb25lIGdpZnQgZm9yIG9wZW5pbmcgYWNjb3VudHMgd2l0aGluIHRoZSBzYW1lIHRheCB5ZWFyLCBhbmQgaWYgc28sIHRoZSBkZXRhaWxzIGZvciBlYWNoLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHdlIGNhbiBhY2N1cmF0ZWx5IGFzc2VzcyB0aGUgdGF4IGltcGxpY2F0aW9ucyBhbmQgY29tcGx5IHdpdGggYWxsIElSUyByZXF1aXJlbWVudHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDRCBJbnRlcmVzdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkNEIEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VG8gZW5zdXJlIGFjY3VyYXRlIHJlcG9ydGluZyBvZiB5b3VyIGluY29tZSBmcm9tIENlcnRpZmljYXRlcyBvZiBEZXBvc2l0IChDRHMpIGZvciB0aGUgdGF4IHllYXIsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaXMgZXNzZW50aWFsIHRvIGNvbXBseSB3aXRoIElSUyByZWd1bGF0aW9ucyBhbmQgdG8gcG90ZW50aWFsbHkgb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+TmFtZSBvZiB0aGUgQmFuayBvciBGaW5hbmNpYWwgSW5zdGl0dXRpb246PC9zdHJvbmc+IFdoZXJlIHRoZSBDRCBpcyBoZWxkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyOjwvc3Ryb25nPiBUaGlzIGhlbHBzIGluIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyBDRC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBJbnRlcmVzdCBFYXJuZWQ6PC9zdHJvbmc+IFRoZSBhbW91bnQgb2YgaW50ZXJlc3QgZWFybmVkIGZyb20gdGhlIENEIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q0QgVGVybTo8L3N0cm9uZz4gVGhlIGR1cmF0aW9uIG9yIHRlcm0gb2YgdGhlIENEIChlLmcuLCA2IG1vbnRocywgMSB5ZWFyKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFB1cmNoYXNlOjwvc3Ryb25nPiBXaGVuIHlvdSBvcmlnaW5hbGx5IGFjcXVpcmVkIHRoZSBDRC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5NYXR1cml0eSBEYXRlOjwvc3Ryb25nPiBXaGVuIHRoZSBDRCByZWFjaGVkIG9yIHdpbGwgcmVhY2ggaXRzIGZ1bGwgdGVybS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LUlOVCBGb3Jtczo8L3N0cm9uZz4gSWYgcmVjZWl2ZWQsIHBsZWFzZSBpbmNsdWRlIGNvcGllcyBvZiBhbnkgMTA5OS1JTlQgZm9ybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBDRCBpbnRlcmVzdC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gWW91IG1heSB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBwcm92aWRlIHRoZW0gdmlhIGVtYWlsLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheCBFeGVtcHQgSW50ZXJlc3RcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXggRXhlbXB0IEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRheC1leGVtcHQgaW50ZXJlc3QgZHVyaW5nIHRoZSB0YXggeWVhciwgcG9zc2libHkgZnJvbSBtdW5pY2lwYWwgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlN0YXRlbWVudHMgb2YgVGF4LUV4ZW1wdCBJbnRlcmVzdDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIDEwOTktSU5UIGZvcm1zIG9yIGVxdWl2YWxlbnQgc3RhdGVtZW50cyB0aGF0IGRldGFpbCB5b3VyIHRheC1leGVtcHQgaW50ZXJlc3QgaW5jb21lIGZvciB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiBJc3N1aW5nIEVudGl0aWVzOjwvc3Ryb25nPiBBIGxpc3Qgb3Igc3RhdGVtZW50IGlkZW50aWZ5aW5nIHRoZSBlbnRpdGllcyB0aGF0IGlzc3VlZCB0aGUgYm9uZHMgb3Igc2ltaWxhciBpbnZlc3RtZW50cy4gVGhpcyBpbmNsdWRlcyBtdW5pY2lwYWwsIHN0YXRlLCBvciBmZWRlcmFsIGVudGl0aWVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgRGV0YWlsOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgaW52ZXN0bWVudHMgY29udHJpYnV0aW5nIHRvIHRheC1leGVtcHQgaW50ZXJlc3QuIFRoaXMgc2hvdWxkIGluY2x1ZGUgdGhlIHB1cmNoYXNlIGRhdGUsIHB1cmNoYXNlIGFtb3VudHMsIGFuZCBhbnkgcmVsYXRlZCBtYXR1cml0eSBkYXRlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ccm9rZXJhZ2UgQWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgeW91ciBicm9rZXJhZ2UgYWNjb3VudCBzdGF0ZW1lbnRzIHRoYXQgZGV0YWlsIHRyYW5zYWN0aW9ucyBhbmQgaG9sZGluZ3MgaW4gdGF4LWV4ZW1wdCBpbnZlc3RtZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BTVQgKEFsdGVybmF0aXZlIE1pbmltdW0gVGF4KSBDb25zaWRlcmF0aW9uOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGRvY3VtZW50YXRpb24gaW5kaWNhdGluZyB3aGV0aGVyIGFueSBvZiB0aGUgdGF4LWV4ZW1wdCBpbnRlcmVzdCBpcyBzdWJqZWN0IHRvIHRoZSBBbHRlcm5hdGl2ZSBNaW5pbXVtIFRheC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhbiBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kIEludGVyZXN0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaG9wZSB0aGlzIG1lc3NhZ2UgZmluZHMgeW91IHdlbGwuIEFzIHBhcnQgb2Ygb3VyIGNvbnRpbnVlZCBlZmZvcnQgdG8gcHJvdmlkZSB5b3Ugd2l0aCB0aGUgYmVzdCB0YXggcHJlcGFyYXRpb24gc2VydmljZXMsIHdlIGFyZSByZWFjaGluZyBvdXQgdG8gZ2F0aGVyIG5lY2Vzc2FyeSBkb2N1bWVudGF0aW9uIHJlbGF0ZWQgdG8gdGhlIGludGVyZXN0IHlvdSBtYXkgaGF2ZSByZWNlaXZlZCBmcm9tIHJlZGVlbWluZyBhbiBFZHVjYXRpb25hbCBTYXZpbmdzIEJvbmQuPC9wPlxuXG4gICAgPHA+VG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBleGVtcHRpb24gYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUywgd2Uga2luZGx5IHJlcXVlc3QgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBjb3B5IG9mIEZvcm0gMTA5OS1JTlQgb3Igc2ltaWxhciBzdGF0ZW1lbnQgcHJvdmlkZWQgYnkgdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiwgaW5kaWNhdGluZyB0aGUgYW1vdW50IG9mIGludGVyZXN0IHJlY2VpdmVkIGZyb20gdGhlIEVkdWNhdGlvbmFsIFNhdmluZ3MgQm9uZC48L2xpPlxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjb3JkcyBvZiB0aGUgRWR1Y2F0aW9uYWwgU2F2aW5ncyBCb25kcyByZWRlZW1lZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkJvbmQgc2VyaWFsIG51bWJlcnM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Jc3N1ZSBkYXRlczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlJlZGVtcHRpb24gZGF0ZXM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5SZWNlaXB0cyBvciBkb2N1bWVudGF0aW9uIGZvciBxdWFsaWZpZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgcGFpZCBkdXJpbmcgdGhlIHllYXIsIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+VHVpdGlvbiBhbmQgZmVlczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkNvdXJzZSBtYXRlcmlhbHM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Bbnkgb3RoZXIgcmVxdWlyZWQgZXhwZW5zZXMgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgZW5yb2xsbWVudCBmcm9tIGFuIGVsaWdpYmxlIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIGZvciB0aGUgYmVuZWZpY2lhcnkgb2YgdGhlIGJvbmQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGludGVyZXN0IGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemluZyB5b3VyIHRheCBiZW5lZml0cy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCByZWNvbW1lbmQgY29tcGlsaW5nIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXZpZGVuZCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEaXZpZGVuZCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmQgaW5jb21lIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluY29tZSBhbmQgb3B0aW1pemUgeW91ciB0YXggc2l0dWF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+QWxsIDEwOTktRElWIGZvcm1zIHJlY2VpdmVkIGZyb20gY29ycG9yYXRpb25zIG9yIG11dHVhbCBmdW5kcy4gVGhpcyBpbmNsdWRlcyBkaXN0cmlidXRpb25zIG9mIGNhc2gsIHN0b2NrLCBvciBvdGhlciBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGRldGFpbHMgcmVnYXJkaW5nIGFueSBmb3JlaWduIGRpdmlkZW5kcyBpbmNsdWRpbmcgdGhlIGFtb3VudCBpbiBmb3JlaWduIGN1cnJlbmN5LCB0aGUgY291bnRyeSBvZiBvcmlnaW4sIGFuZCBhbnkgZm9yZWlnbiB0YXggcGFpZC48L2xpPlxuICAgICAgPGxpPkZvciBkaXZpZGVuZHMgcmVpbnZlc3RlZCwgcGxlYXNlIHByb3ZpZGUgc3RhdGVtZW50cyBvciBjb25maXJtYXRpb25zIHNob3dpbmcgdGhlc2UgdHJhbnNhY3Rpb25zLjwvbGk+XG4gICAgICA8bGk+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGRpdmlkZW5kcyBub3QgY292ZXJlZCBieSBhIDEwOTktRElWLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIGFsbCBkb2N1bWVudHMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlIHRvIGF2b2lkIGFueSBwcm9jZXNzaW5nIGRlbGF5cy48L3A+XG4gICAgPHA+WW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgYXBwcmVjaWF0ZWQgYXMgaXQgd2lsbCBoZWxwIHVzIGluIGNvbXBsZXRpbmcgeW91ciB0YXggcHJlcGFyYXRpb25zIGVmZmljaWVudGx5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRpc3Bvc2VkIENhcGl0YWwgQXNzZXRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGlzcG9zZWQgQ2FwaXRhbCBBc3NldHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91J3ZlIGluZGljYXRlZCBkaXNwb3Npbmcgb2YgY2FwaXRhbCBhc3NldHMgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBjb21wbGV0ZSBhbmQgY29tcGxpYW50LCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48Yj5EZXNjcmlwdGlvbiBvZiBlYWNoIGRpc3Bvc2VkIGFzc2V0OjwvYj4gSW5jbHVkZSB0aGUgdHlwZSBvZiBhc3NldCAoZS5nLiwgcmVhbCBlc3RhdGUsIHN0b2NrcywgYm9uZHMpLjwvbGk+XG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIGFjcXVpc2l0aW9uOjwvYj4gVGhlIHB1cmNoYXNlIGRhdGUgb3IgdGhlIGRhdGUgeW91IG9yaWdpbmFsbHkgY2FtZSBpbnRvIHBvc3Nlc3Npb24gb2YgZWFjaCBhc3NldC48L2xpPlxuICAgICAgICA8bGk+PGI+QWNxdWlzaXRpb24gY29zdDo8L2I+IFRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBvciBjb3N0IGJhc2lzIG9mIGVhY2ggYXNzZXQsIGluY2x1ZGluZyBhbnkgaW1wcm92ZW1lbnRzIG1hZGUuPC9saT5cbiAgICAgICAgPGxpPjxiPkRhdGUgb2YgZGlzcG9zYWw6PC9iPiBUaGUgc3BlY2lmaWMgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLCBleGNoYW5nZWQsIG9yIG90aGVyd2lzZSBkaXNwb3NlZCBvZi48L2xpPlxuICAgICAgICA8bGk+PGI+U2FsZSBvciBkaXNwb3NhbCBwcm9jZWVkczo8L2I+IFRoZSB0b3RhbCBhbW91bnQgcmVjZWl2ZWQgZnJvbSB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LjwvbGk+XG4gICAgICAgIDxsaT48Yj5Bc3NvY2lhdGVkIGV4cGVuc2VzOjwvYj4gQW55IGNvc3RzIGluY3VycmVkIGRpcmVjdGx5IGZyb20gdGhlIHNhbGUgb3IgZGlzcG9zYWwgcHJvY2Vzcywgc3VjaCBhcyBicm9rZXIncyBmZWVzLCBhZHZlcnRpc2luZywgbGVnYWwgZmVlcywgZXRjLjwvbGk+XG4gICAgICAgIDxsaT48Yj5SZWFzb24gZm9yIGRpc3Bvc2FsOjwvYj4gQnJpZWZseSBkZXNjcmliZSB0aGUgcmVhc29uIGJlaGluZCB0aGUgZGlzcG9zYWwgb2YgdGhlIGFzc2V0LCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGNhbGN1bGF0aW5nIHBvdGVudGlhbCBjYXBpdGFsIGdhaW5zIG9yIGxvc3NlcyBhbmQgZGV0ZXJtaW5pbmcgdGhlaXIgaW1wYWN0IG9uIHlvdXIgdGF4IG9ibGlnYXRpb25zLiBQbGVhc2UgYXR0YWNoIGFueSBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIHN1Y2ggYXMgc2FsZXMgcmVjZWlwdHMsIGRlZWRzLCBjb250cmFjdHMsIG9yIGJyb2tlcmFnZSBzdGF0ZW1lbnRzLCB0byBzdWJzdGFudGlhdGUgdGhlIGRldGFpbHMgcHJvdmlkZWQuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIHlvdSBtYXkgaGF2ZS4gWW91IGNhbiByZWFjaCB1cyB2aWEgZW1haWwgb3IgcGhvbmUgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEaXNwb3NlZCBEaWdpdGFsIEFzc2V0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRpc3Bvc2VkIERpZ2l0YWwgQXNzZXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+WW91IGFuc3dlcmVkIFwiWWVzXCIgdG8gZGlzcG9zaW5nIG9mIGRpZ2l0YWwgYXNzZXRzIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgdHJhbnNhY3Rpb25zLCBwbGVhc2Ugc3VibWl0IHRoZSBmb2xsb3dpbmc6PC9wPlxuICA8b2w+XG4gICAgPGxpPlRyYW5zYWN0aW9uIGRhdGVzPC9saT5cbiAgICA8bGk+VHlwZXMgb2YgYXNzZXRzIGJvdWdodCwgc29sZCwgb3IgZXhjaGFuZ2VkPC9saT5cbiAgICA8bGk+QW1vdW50cyBpbnZvbHZlZCBpbiBlYWNoIHRyYW5zYWN0aW9uPC9saT5cbiAgICA8bGk+QW55IDEwOTkgZm9ybXMgcmVjZWl2ZWQgZm9yIGRpZ2l0YWwgYXNzZXQgYWN0aXZpdGllczwvbGk+XG4gICAgPGxpPkRldGFpbHMgb2YgbWluaW5nLCBzdGFraW5nLCBvciBhaXJkcm9wIGluY29tZSwgaWYgYXBwbGljYWJsZTwvbGk+XG4gIDwvb2w+XG4gIDxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW5jbHVkZSBhbGwgc2FsZXMsIHRyYWRlcywgYW5kIGV4Y2hhbmdlcywgZXZlbiBpZiB5b3UgZGlkbid0IHJlY2VpdmUgYSB0YXggZm9ybS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTXV0dWFsIEZ1bmQgR2FpblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIEdhaW5cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5JbiBvcmRlciB0byBhY2N1cmF0ZWx5IHJlcG9ydCB5b3VyIG11dHVhbCBmdW5kIGVhcm5pbmdzIG9uIHlvdXIgdGF4IHJldHVybiwgYXMgcGVyIHlvdXIgaW5kaWNhdGlvbiBvZiByZWNlaXZpbmcgZ2FpbnMgZnJvbSBhIG11dHVhbCBmdW5kIG9yIHNpbWlsYXIgaW52ZXN0bWVudCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz4xMDk5LURJViBGb3JtOjwvc3Ryb25nPiBUaGlzIGZvcm0gaXMgY3J1Y2lhbCBhcyBpdCBwcm92aWRlcyBkZXRhaWxzIG9uIGRpdmlkZW5kcyBhbmQgZGlzdHJpYnV0aW9ucyB5b3UgcmVjZWl2ZWQgZnJvbSB5b3VyIG11dHVhbCBmdW5kIGludmVzdG1lbnRzLiBQbGVhc2UgZW5zdXJlIHRvIHByb3ZpZGUgdGhpcyBmb3JtIGlmIHlvdXIgbXV0dWFsIGZ1bmQgZWFybmluZ3Mgd2VyZSByZXBvcnRlZCBvbiBpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgQWNjb3VudDo8L3N0cm9uZz4gVGhpcyBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBhbGwgdHJhbnNhY3Rpb25zIHdpdGhpbiB5b3VyIGFjY291bnQsIGluY2x1ZGluZyBwdXJjaGFzZXMsIHJlZGVtcHRpb25zLCBhbmQgcmVpbnZlc3RlZCBkaXZpZGVuZHMgd2hpY2ggaGVscCB1cyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHlvdXIgZ2FpbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+WWVhci1FbmQgU3VtbWFyeTo8L3N0cm9uZz4gT2Z0ZW4gbXV0dWFsIGZ1bmRzIHByb3ZpZGUgYSB5ZWFyLWVuZCBzdW1tYXJ5IHRvIHRoZWlyIGludmVzdG9ycy4gVGhpcyBzdW1tYXJ5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwgaW4gcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYXMgaXQgY29uc29saWRhdGVzIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QW55IG90aGVyIHJlbGV2YW50IGRvY3VtZW50czo8L3N0cm9uZz4gVGhpcyBjb3VsZCBpbmNsdWRlIGFkZGl0aW9uYWwgMTA5OSBmb3JtcyAobGlrZSAxMDk5LUIgaWYgYW55IHNhbGVzIG9jY3VycmVkKSwgb3JpZ2luYWwgaW52ZXN0bWVudCBzdGF0ZW1lbnRzLCBvciBhbnl0aGluZyBlbHNlIHRoYXQgY291bGQgaW1wYWN0IHlvdXIgdGF4IHNpdHVhdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMgbWF5IHJlcXVpcmUgc29tZSB0aW1lLCBob3dldmVyLCBoYXZpbmcgdGhlc2UgcmVhZGlseSBhdmFpbGFibGUgd2lsbCBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBlZmZpY2llbmN5IG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpbGwgYmUgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBkaWZmaWN1bHRpZXMgb2J0YWluaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJNdXR1YWwgRnVuZCBEaXNwb3NhbFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk11dHVhbCBGdW5kIERpc3Bvc2FsXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBtYWRlIGEgZGlzcG9zYWwgb2Ygc2hhcmVzIGluIGEgbXV0dWFsIGZ1bmQgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBhY3QgYW5kIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGFjY3VyYXRlbHksIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+VGhlIDxzdHJvbmc+MTA5OS1CIGZvcm08L3N0cm9uZz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtdXR1YWwgZnVuZCBkaXNwb3NhbCwgaWYgYXZhaWxhYmxlLiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGRldGFpbHMgb24gdGhlIHNhbGUgb2YgeW91ciBzaGFyZXMuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbGVkIDxzdHJvbmc+cmVjb3JkIG9mIHRoZSBwdXJjaGFzZTwvc3Ryb25nPiBvZiB0aGUgbXV0dWFsIGZ1bmQgc2hhcmVzIGluY2x1ZGluZyB0aGUgcHVyY2hhc2UgZGF0ZSBhbmQgY29zdCBiYXNpcy4gVGhpcyBpcyBjcnVjaWFsIGZvciBjYWxjdWxhdGluZyBhbnkgY2FwaXRhbCBnYWluIG9yIGxvc3MuPC9saT5cbiAgICAgICAgPGxpPklmIHRoZSAxMDk5LUIgZm9ybSBpcyBub3QgYXZhaWxhYmxlLCBwbGVhc2UgcHJvdmlkZSBhbnkgPHN0cm9uZz5icm9rZXJhZ2Ugc3RhdGVtZW50czwvc3Ryb25nPiBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgc2hvd3MgdGhlIGRpc3Bvc2FsIG9mIHRoZSBtdXR1YWwgZnVuZCBzaGFyZXMsIGluY2x1ZGluZyB0aGUgc2FsZSBkYXRlIGFuZCBhbW91bnQuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IDxzdHJvbmc+cmVpbnZlc3RlZCBkaXZpZGVuZHM8L3N0cm9uZz4gb3IgY2FwaXRhbCBnYWlucyBkaXN0cmlidXRpb25zLCBhcyB0aGVzZSBjYW4gYWRqdXN0IHlvdXIgY29zdCBiYXNpcyBhbmQgYWZmZWN0IHRoZSBjYWxjdWxhdGlvbiBvZiB5b3VyIGNhcGl0YWwgZ2FpbiBvciBsb3NzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5IYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBlc3NlbnRpYWwgZm9yIGVuc3VyaW5nIHRoYXQgd2UgYWNjdXJhdGVseSByZXBvcnQgdGhlIGRpc3Bvc2FsIG9mIHlvdXIgbXV0dWFsIGZ1bmQgc2hhcmVzIGFuZCBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGNhcGl0YWwgZ2FpbnMgb3IgbG9zc2VzLiBUaGlzIHdpbGwgYWxzbyBoZWxwIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGxpYWJpbGl0eSBmb3IgdGhlIHllYXIuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV2FzaCBTYWxlXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiV2FzaCBTYWxlIFRyYW5zYWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgaGF2ZSBub3RlZCB5b3VyIGluZGljYXRpb24gb2YgYSBwb3NzaWJsZSBXYXNoIFNhbGUgdHJhbnNhY3Rpb24uIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wYWN0IGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyBydWxlcywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCB0cmFuc2FjdGlvbiByZWNvcmRzPC9zdHJvbmc+IC0gUGxlYXNlIHByb3ZpZGUgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdGhlIHNlY3VyaXR5IHRoYXQgd2FzIHNvbGQgYW5kIHRoZW4gcmVwdXJjaGFzZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cyBmb3IgZWFjaCB0cmFuc2FjdGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IGJhc2lzIGZvciByZXB1cmNoYXNlZCBzZWN1cml0eTwvc3Ryb25nPiAtIERldGFpbHMgb2YgdGhlIGNvc3QgYmFzaXMgZm9yIHRoZSBzZWN1cml0aWVzIHJlcHVyY2hhc2VkIHdpdGhpbiBhIDYxLWRheSB3aW5kb3cgKDMwIGRheXMgYmVmb3JlIHRvIDMwIGRheXMgYWZ0ZXIgdGhlIHNhbGUpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgc3RhdGVtZW50czwvc3Ryb25nPiAtIENvcGllcyBvZiB5b3VyIGJyb2tlcmFnZSBhY2NvdW50IHN0YXRlbWVudHMgc2hvd2luZyB0aGUgdHJhbnNhY3Rpb25zIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkxvc3NlcyByZWFsaXplZDwvc3Ryb25nPiAtIERvY3VtZW50YXRpb24gb2YgYW55IGxvc3NlcyByZWFsaXplZCBmcm9tIHRoZXNlIHRyYW5zYWN0aW9ucy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgY29ycmVzcG9uZGVuY2U8L3N0cm9uZz4gLSBDb3JyZXNwb25kZW5jZSBmcm9tIGJyb2tlcnMgb3IgZmluYW5jaWFsIGFkdmlzb3JzIHJlZ2FyZGluZyB0aGVzZSB0cmFuc2FjdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZG9jdW1lbnRzIGFyZSBvcmdhbml6ZWQgYW5kIGNsZWFybHkgbGFiZWxlZCBmb3IgZWFjaCB0cmFuc2FjdGlvbi4gVGhpcyB3aWxsIGZhY2lsaXRhdGUgYSBzbW9vdGhlciBhbmQgcXVpY2tlciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+XG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGUgc3BlY2lmaWNzIG9mIHlvdXIgV2FzaCBTYWxlIHRyYW5zYWN0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIHByb3ZpZGUgYWNjdXJhdGUgdGF4IGFkdmljZSBhbmQgcHJlcGFyYXRpb24uIEZ1cnRoZXIsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBhc3Npc3QgaW4gZGV0ZXJtaW5pbmcgaG93IHRoZSBXYXNoIFNhbGUgcnVsZSBhZmZlY3RzIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIGFueSBsb3NzZXMgeW91IG1pZ2h0IGhhdmUgaW5jdXJyZWQuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBQbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZmlsaW5ncy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gWW91ciBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTb2xkIEhvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTb2xkIEhvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgc29sZCBhIHBlcnNvbmFsIGhvbWUgZHVyaW5nIHRoZSB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBhc3Nlc3MgdGhlIHRheCBpbXBsaWNhdGlvbnMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgY2xvc2luZyBkYXRlIHdoZW4gdGhlIHNhbGUgd2FzIG9mZmljaWFsbHkgY29tcGxldGVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNhbGUgUHJpY2U6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgeW91IHJlY2VpdmVkIGZvciB0aGUgaG9tZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db3N0IEJhc2lzOjwvc3Ryb25nPiBPcmlnaW5hbCBwdXJjaGFzZSBwcmljZSwgcGx1cyBhbnkgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIGhvbWUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgRGV0YWlsczo8L3N0cm9uZz4gQWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5NYWluIFJlc2lkZW5jZSBvciBOb3Q6PC9zdHJvbmc+IFBsZWFzZSBjb25maXJtIGlmIHRoaXMgd2FzIHlvdXIgbWFpbiByZXNpZGVuY2UgZm9yIGF0IGxlYXN0IHR3byBvZiB0aGUgbGFzdCBmaXZlIHllYXJzIHByaW9yIHRvIHRoZSBzYWxlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlY29yZHMgb2YgSG9tZSBJbXByb3ZlbWVudHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHJlY29yZHMgb2YgYW55IG1ham9yIGltcHJvdmVtZW50cyBtYWRlIHRvIHRoZSBwcm9wZXJ0eSwgd2hpY2ggY2FuIGFmZmVjdCB0aGUgY29zdCBiYXNpcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBVc2U6PC9zdHJvbmc+IElmIG5vdCBhbHdheXMgdXNlZCBhcyBhIHBlcnNvbmFsIGhvbWUsIGRldGFpbHMgb24gYW55IHVzZSBvZiB0aGUgcHJvcGVydHkgZm9yIHJlbnRhbCwgYnVzaW5lc3MsIG9yIG90aGVyIG5vbi1wZXJzb25hbCB1c2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVsYXRlZCBFeHBlbnNlczo8L3N0cm9uZz4gQW55IGNvc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FsZSwgc3VjaCBhcyBsZWdhbCBmZWVzLCByZWFsIGVzdGF0ZSBhZ2VudCBjb21taXNzaW9ucywgYW5kIGhvbWUgc3RhZ2luZyBleHBlbnNlcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZGV0YWlscyBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBlbnN1cmUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJJbnN0YWxsbWVudCBTYWxlIFBheW1lbnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSW5zdGFsbG1lbnQgU2FsZSBQYXltZW50c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgeW91J3ZlIHNvbGQgcHJvcGVydHkgdGhpcyB5ZWFyIHVuZGVyIGFuIGluc3RhbGxtZW50IHBsYW4uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgdHJhbnNhY3Rpb24gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U2FsZSBBZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgY29tcGxldGUgc2FsZSBhZ3JlZW1lbnQgZGV0YWlsaW5nIHRoZSB0ZXJtcyBvZiB0aGUgaW5zdGFsbG1lbnQgc2FsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvcGVydHkgc29sZCAoZS5nLiwgbGFuZCwgYnVpbGRpbmcsIGVxdWlwbWVudCkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudCBTY2hlZHVsZTo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gdGhlIHBheW1lbnQgc2NoZWR1bGUgYWdyZWVkIHVwb24sIGluY2x1ZGluZyB0aGUgZGF0ZXMgYW5kIGFtb3VudHMgb2YgZWFjaCBpbnN0YWxsbWVudC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnRzIFJlY2VpdmVkOjwvc3Ryb25nPiBUb3RhbCBhbW91bnRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZyBkb3duIHBheW1lbnQgYW5kIGFueSBpbnN0YWxsbWVudCBwYXltZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QcmluY2lwYWwgJmFtcDsgSW50ZXJlc3QgQnJlYWtkb3duOjwvc3Ryb25nPiBBIGJyZWFrZG93biBvZiB0aGUgYW1vdW50cyByZWNlaXZlZCBiZXR3ZWVuIHByaW5jaXBhbCBhbmQgaW50ZXJlc3QgZm9yIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBCYXNpczo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiByZWdhcmRpbmcgdGhlIHByb3BlcnR5J3Mgb3JpZ2luYWwgY29zdCwgaW1wcm92ZW1lbnRzIG1hZGUsIGFuZCBhbnkgZGVwcmVjaWF0aW9uIHRha2VuIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgcmVsZXZhbnQgZXhwZW5zZXMgaW4gcmVsYXRpb24gdG8gdGhlIHNhbGUgdGhhdCBtaWdodCBiZSBkZWR1Y3RpYmxlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJ1eWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBMZWdhbCBuYW1lIGFuZCBjb250YWN0IGRldGFpbHMgb2YgdGhlIGJ1eWVyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgYW55IHByb2ZpdCBvciBsb3NzIGZyb20gdGhlIHNhbGUgYW5kIGRldGVybWluaW5nIHRoZSBjb3JyZWN0IHRheCBpbXBsaWNhdGlvbnMgb2YgdGhlIGluc3RhbGxtZW50IHBheW1lbnRzIHJlY2VpdmVkLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJucy4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBkaXJlY3RseSB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbCBvciBlbWFpbCB0aGVtIHRvIHRheEBsZW5kYWhhbmRhY2NvdW50aW5nLmNvbS48L3A+XG4gICAgPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiV29ydGhsZXNzIFNlY3VyaXRpZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJXb3J0aGxlc3MgU2VjdXJpdGllc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBoYWQgaW52ZXN0bWVudHMsIHN1Y2ggYXMgc3RvY2tzIG9yIGJvbmRzLCB0aGF0IGJlY2FtZSBjb21wbGV0ZWx5IHdvcnRobGVzcyB0aGlzIHllYXIsIHdlIG5lZWQgdG8gZ2F0aGVyIHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIHByb3Blcmx5IHJlcG9ydCB0aGVzZSBvbiB5b3VyIHRheCByZXR1cm4uIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgU2VjdXJpdHk6PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgdHlwZSBvZiBlYWNoIHNlY3VyaXR5IHRoYXQgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QdXJjaGFzZSBEZXRhaWxzOjwvc3Ryb25nPiBEYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIGVhY2ggc2VjdXJpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+V29ydGhsZXNzbmVzcyBEZXRlcm1pbmF0aW9uIERhdGU6PC9zdHJvbmc+IFRoZSBleGFjdCBkYXRlIHdoZW4geW91IGRldGVybWluZWQgdGhlIHNlY3VyaXR5IHRvIGJlIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB5b3UgcmVjZWl2ZWQgb3IgdXNlZCB0byBkZXRlcm1pbmUgdGhhdCB0aGUgaW52ZXN0bWVudHMgYmVjYW1lIHdvcnRobGVzcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BdHRlbXB0cyB0byBTZWxsIG9yIFRyYWRlOjwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGFueSBhdHRlbXB0cyBtYWRlIHRvIHNlbGwgb3IgdHJhZGUgdGhlIHNlY3VyaXRpZXMgYmVmb3JlIGRldGVybWluaW5nIHRoZXkgd2VyZSB3b3J0aGxlc3MuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBBY2NvdW50IFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiB5b3VyIGludmVzdG1lbnQgYWNjb3VudCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHdvcnRobGVzcyBzZWN1cml0aWVzIGFuZCB0aGVpciB2YWx1ZSBvdmVyIHRpbWUsIGxlYWRpbmcgdXAgdG8gdGhlaXIgZGVjbGFyZWQgd29ydGhsZXNzbmVzcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTZWN0aW9uIDEyNDQgQnVzaW5lc3MgU3RvY2tcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBtb3JlIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBzYWxlIG9mIHNoYXJlcyBpbiBhIHNtYWxsIGJ1c2luZXNzIHdoZXJlIHlvdSB3ZXJlIGFuIG9yaWdpbmFsIGludmVzdG9yLiBBcyB5b3UgaW5kaWNhdGVkIGEgbG9zcyBvbiB0aGlzIGludmVzdG1lbnQsIGl0J3MgY3J1Y2lhbCB0byBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgcXVhbGlmaWVzIGZvciBzcGVjaWFsIHRheCB0cmVhdG1lbnQgdW5kZXIgU2VjdGlvbiAxMjQ0LiBUbyBhY2N1cmF0ZWx5IGFuYWx5emUgYW5kIHJlcG9ydCB0aGVzZSBhY3Rpdml0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5UaGUgPHN0cm9uZz5jZXJ0aWZpY2F0ZSBvZiBpbmNvcnBvcmF0aW9uPC9zdHJvbmc+IG9yIG90aGVyIGRvY3VtZW50YXRpb24gY29uZmlybWluZyB0aGUgc3RvY2sgcXVhbGlmaWVzIGFzIFNlY3Rpb24gMTI0NCBzdG9jay48L2xpPlxuICAgICAgICA8bGk+QSA8c3Ryb25nPmRldGFpbGVkIHN0YXRlbWVudDwvc3Ryb25nPiBvZiB0aGUgaW52ZXN0bWVudCwgaW5jbHVkaW5nOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgYW5kIGRhdGUgb2YgdGhlIG9yaWdpbmFsIGludmVzdG1lbnQuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBwdXJjaGFzZWQuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+UHJvb2Ygb2YgYmVpbmcgYW4gb3JpZ2luYWwgaG9sZGVyLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIHRoZSBzYWxlPC9zdHJvbmc+LCBzcGVjaWZ5aW5nOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGUuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+TnVtYmVyIG9mIHNoYXJlcyBzb2xkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlNhbGUgcHJpY2UuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFzc29jaWF0ZWQgZXhwZW5zZXMgd2l0aCB0aGUgc2FsZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkEgYnJpZWYgZXhwbGFuYXRpb24gb2YgdGhlIGNpcmN1bXN0YW5jZXMgbGVhZGluZyB0byB0aGUgbG9zcy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiB3aWxsIGVuYWJsZSB1cyB0byBhc3Nlc3MgdGhlIGVsaWdpYmlsaXR5IGZvciBhIGJlbmVmaWNpYWwgdGF4IHRyZWF0bWVudCB1bmRlciBTZWN0aW9uIDEyNDQsIHBvdGVudGlhbGx5IG1pbmltaXppbmcgeW91ciB0YXhhYmxlIGluY29tZS4gUGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aW1lbHkgZmlsaW5nLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbGF0ZWQgUGFydHkgVHJhbnNhY3Rpb25zXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVsYXRlZCBQYXJ0eSBUcmFuc2FjdGlvbnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSByZWNlaXZlZCB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlIHRyYW5zYWN0aW9ucyB3aXRoIHJlbGF0ZWQgcGFydGllcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFzc2VzcyB0aGVzZSB0cmFuc2FjdGlvbnMgYW5kIGluY29ycG9yYXRlIHRoZW0gaW50byB5b3VyIHRheCBmaWxpbmdzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIHRoZSBUcmFuc2FjdGlvbnM6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlR5cGUgb2YgdHJhbnNhY3Rpb25zIChlLmcuLCBzYWxlLCB0cmFkZSwgdHJhbnNmZXIgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMpLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUocykgb2YgdHJhbnNhY3Rpb25zLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIGl0ZW1zIG9yIHByb3BlcnRpZXMgdHJhbnNmZXJyZWQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBhcnRpZXMgSW52b2x2ZWQ6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPk5hbWVzIGFuZCByZWxhdGlvbnNoaXBzIHRvIHlvdSAoZS5nLiwgZmFtaWx5IG1lbWJlciwgZnJpZW5kLCBvciBidXNpbmVzcyBlbnRpdHkpLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPklmIGEgYnVzaW5lc3MgZW50aXR5IGlzIGludm9sdmVkLCB5b3VyIGFuZCB5b3VyIGZhbWlseSdzIG93bmVyc2hpcCBwZXJjZW50YWdlIGluIHRoZSBidXNpbmVzcy48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIERldGFpbHMgb2YgdGhlIFRyYW5zYWN0aW9uczo8L3N0cm9uZz5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+TWFya2V0IHZhbHVlIG9mIHByb3BlcnR5IG9yIGludmVzdG1lbnRzIGF0IHRoZSB0aW1lIG9mIHRyYW5zYWN0aW9uLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudCByZWNlaXZlZCBvciBwYWlkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBleGNoYW5nZSBvZiBnb29kcywgc2VydmljZXMsIG9yIG90aGVyIGFzc2V0cywgaW5jbHVkaW5nIHRoZWlyIGZhaXIgbWFya2V0IHZhbHVlLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db3BpZXMgb2YgY29udHJhY3RzIG9yIGFncmVlbWVudHMuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+UmVjZWlwdHMgb3IgcHJvb2Ygb2YgcGF5bWVudC9leGNoYW5nZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BcHByYWlzYWxzIG9yIHZhbHVhdGlvbnMgb2YgcHJvcGVydHkgb3IgaW52ZXN0bWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgcmVnYXJkaW5nIHJlbGF0ZWQgcGFydHkgdHJhbnNhY3Rpb25zIGFuZCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHBlbmFsdGllcyBvciBhdWRpdHMuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBmYWNpbGl0YXRlIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9ucy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBUaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VjdGlvbiAxMjEgSG9tZSBTYWxlXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgc29sZCB5b3VyIG1haW4gaG9tZSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB0aGUgZXhjbHVzaW9uIG9mIGdhaW4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4gQmVsb3cgaXMgYSBkZXRhaWxlZCBsaXN0IG9mIHdoYXQgd2UgbmVlZCBmcm9tIHlvdTo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlscyBvZiB0aGUgU2FsZTo8L3N0cm9uZz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EYXRlIG9mIHNhbGU8L2xpPlxuICAgICAgICAgIDxsaT5TZWxsaW5nIHByaWNlPC9saT5cbiAgICAgICAgICA8bGk+QW55IHNlbGxpbmcgZXhwZW5zZXMgKGUuZy4sIHJlYWwgZXN0YXRlIGNvbW1pc3Npb25zLCBsZWdhbCBmZWVzLCBldGMuKTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q29zdCBCYXNpcyBJbmZvcm1hdGlvbjo8L3N0cm9uZz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EYXRlIG9mIHB1cmNoYXNlPC9saT5cbiAgICAgICAgICA8bGk+T3JpZ2luYWwgcHVyY2hhc2UgcHJpY2U8L2xpPlxuICAgICAgICAgIDxsaT5SZWNvcmRzIG9mIGltcHJvdmVtZW50cyBtYWRlICh3aXRoIGRhdGVzIGFuZCBjb3N0cyk8L2xpPlxuICAgICAgICAgIDxsaT5BbnkgY2FzdWFsdHkgbG9zc2VzIGNsYWltZWQgYW5kIGluc3VyYW5jZSByZWltYnVyc2VtZW50cyByZWNlaXZlZCB3aGlsZSBvd25pbmcgdGhlIHByb3BlcnR5PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5SZXNpZGVuY3kgYW5kIFVzZSBEYXRhOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIG9mIG93bmVyc2hpcDwvbGk+XG4gICAgICAgICAgPGxpPlRvdGFsIHllYXJzIHRoZSBwcm9wZXJ0eSB3YXMgdXNlZCBhcyB5b3VyIG1haW4gaG9tZTwvbGk+XG4gICAgICAgICAgPGxpPkFueSBwZXJpb2RzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBvciB1c2VkIGZvciBidXNpbmVzczwvbGk+XG4gICAgICAgICAgPGxpPkFueSBzcGVjaWFsIGNpcmN1bXN0YW5jZXMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgYW4gZXhjZXB0aW9uIHRvIHRoZSBwaHlzaWNhbCBwcmVzZW5jZSByZXF1aXJlbWVudCAoZS5nLiwgaGVhbHRoIGlzc3VlcywgZW1wbG95bWVudCBjaGFuZ2VzKTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJpb3IgR2FpbiBFeGNsdXNpb25zOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPkhhdmUgeW91IHNvbGQgYW5vdGhlciBtYWluIGhvbWUgd2l0aGluIHRoZSBsYXN0IHR3byB5ZWFycyBhbmQgY2xhaW1lZCBleGNsdXNpb24/PC9saT5cbiAgICAgICAgICA8bGk+SWYgeWVzLCBkZXRhaWxzIG9mIHRoZSBwcmlvciBzYWxlIGluY2x1ZGluZyBkYXRlIGFuZCBhbW91bnQgb2YgZ2FpbiBleGNsdWRlZDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGZpbGluZyBvZiB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgcmVxdWlyZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlY3Rpb24gMTAzMSBFeGNoYW5nZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhvcGUgdGhpcyBtZXNzYWdlIGZpbmRzIHlvdSB3ZWxsLiBJbiByZXZpZXdpbmcgeW91ciByZWNvcmRzLCBpdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IG1heSBoYXZlIGVuZ2FnZWQgaW4gYSBTZWN0aW9uIDEwMzEgZXhjaGFuZ2UuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHJlbGV2YW50IElSUyBndWlkZWxpbmVzLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IERlc2NyaXB0aW9uOjwvc3Ryb25nPiBBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSBhbmQgdGhlIHJlcGxhY2VtZW50IHByb3BlcnR5LiBQbGVhc2UgaW5jbHVkZSBsb2NhdGlvbiwgdHlwZSBvZiBwcm9wZXJ0eSAoZS5nLiwgY29tbWVyY2lhbCwgcmVzaWRlbnRpYWwpLCBhbmQgYW55IGlkZW50aWZ5aW5nIG51bWJlcnMgKGUuZy4sIHBhcmNlbCBudW1iZXIpLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5UcmFuc2FjdGlvbiBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGUgb24gd2hpY2ggdGhlIHJlbGlucXVpc2hlZCBwcm9wZXJ0eSB3YXMgdHJhbnNmZXJyZWQsIGFuZCB0aGUgZGF0ZSB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2FzIHJlY2VpdmVkLiBUaGVzZSBkYXRlcyBhcmUgY3J1Y2lhbCB0byBkZXRlcm1pbmUgY29tcGxpYW5jZSB3aXRoIHRoZSA0NS1kYXkgaWRlbnRpZmljYXRpb24gYW5kIDE4MC1kYXkgZXhjaGFuZ2UgY29tcGxldGlvbiByZXF1aXJlbWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlRyYW5zYWN0aW9uIFZhbHVlczo8L3N0cm9uZz4gVGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGJvdGggdGhlIHJlbGlucXVpc2hlZCBhbmQgcmVwbGFjZW1lbnQgcHJvcGVydGllcyBhdCB0aGUgdGltZSBvZiB0aGUgZXhjaGFuZ2UsIGFsb25nIHdpdGggYW55IGZpbmFuY2lhbCBhZGp1c3RtZW50cyBvciBhZGRpdGlvbmFsIGNhc2ggcmVjZWl2ZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSBhbnkgcG90ZW50aWFsIGdhaW4gb3IgbG9zcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW50ZXJtZWRpYXJ5IERldGFpbHM6PC9zdHJvbmc+IEluZm9ybWF0aW9uIGFib3V0IGFueSBxdWFsaWZpZWQgaW50ZXJtZWRpYXJ5IHVzZWQgZHVyaW5nIHRoZSBleGNoYW5nZSwgaW5jbHVkaW5nIHRoZWlyIG5hbWUsIGNvbnRhY3QgaW5mb3JtYXRpb24sIGFuZCBkZXRhaWxzIG9mIHRoZWlyIGludm9sdmVtZW50LiBJZiBubyBpbnRlcm1lZGlhcnkgd2FzIHVzZWQsIHBsZWFzZSBleHBsYWluIGhvdyB0aGUgZXhjaGFuZ2Ugd2FzIGZhY2lsaXRhdGVkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5PcmlnaW5hbCBQdXJjaGFzZSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIGFuZCBkYXRlIG9mIGFjcXVpc2l0aW9uIGZvciB0aGUgcmVsaW5xdWlzaGVkIHByb3BlcnR5LiBUaGlzIGluZm9ybWF0aW9uIGFzc2lzdHMgaW4gZGV0ZXJtaW5pbmcgdGhlIGJhc2lzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIG9yIEV4cGVuc2VzOjwvc3Ryb25nPiBEZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcmVwbGFjZW1lbnQgcHJvcGVydHkgd2l0aGluIHRoZSBleGNoYW5nZSBwZXJpb2Qgb3IgYW55IGFkZGl0aW9uYWwgZXhwZW5zZXMgaW5jdXJyZWQgdGhhdCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IgaW4gdGhlIHByb3BlcnR5J3MgYmFzaXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgZXZhbHVhdGluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB5b3VyIFNlY3Rpb24gMTAzMSBleGNoYW5nZSBhbmQgZW5zdXJpbmcgdGhhdCBhbGwgSVJTIHJlcXVpcmVtZW50cyBhcmUgbWV0LiBJdCBhbHNvIGhlbHBzIHVzIHRvIGFkdmlzZSB5b3UgYWNjdXJhdGVseSBvbiBhbnkgcG90ZW50aWFsIGRlZmVycmVkIHRheCBsaWFiaWxpdGllcyBvciBiZW5lZml0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2hhbmdlLjwvcD5cbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRldGFpbHMuIFdlIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkludm9sdW50YXJ5IENvbnZlcnNpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJJbnZvbHVudGFyeSBDb252ZXJzaW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSBtYXkgaGF2ZSB1bmRlcmdvbmUgYSBTZWN0aW9uIDEwMzMgZXhjaGFuZ2UgKGludm9sdW50YXJ5IGNvbnZlcnNpb24pIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHRoZSB0YXggaW1wbGljYXRpb25zIGFuZCBlbnN1cmUgbWF4aW11bSBjb21wbGlhbmNlIGFuZCBiZW5lZml0IGZvciB5b3UsIHdlIHJlcXVpcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgZXZlbnQuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPk5hdHVyZSBvZiB0aGUgUHJvcGVydHk6PC9zdHJvbmc+IERlc2NyaWJlIHRoZSB0eXBlIG9mIHByb3BlcnR5IGludm9sdmVkIChlLmcuLCByZWFsIGVzdGF0ZSwgcGVyc29uYWwgcHJvcGVydHksIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbHMgb2YgdGhlIEludm9sdW50YXJ5IENvbnZlcnNpb246PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGNpcmN1bXN0YW5jZXMgdGhhdCBsZWQgdG8gdGhlIGludm9sdW50YXJ5IGNvbnZlcnNpb24gKGUuZy4sIG5hdHVyYWwgZGlzYXN0ZXIsIHRoZWZ0LCBjb25kZW1uYXRpb24pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkluc3VyYW5jZSBQcm9jZWVkcyBSZWNlaXZlZDo8L3N0cm9uZz4gSW5kaWNhdGUgdGhlIGFtb3VudCBvZiBhbnkgaW5zdXJhbmNlIHByb2NlZWRzIHJlY2VpdmVkIGFzIGNvbXBlbnNhdGlvbiBmb3IgdGhlIGNvbnZlcnNpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVpbnZlc3RtZW50IG9mIFByb2NlZWRzOjwvc3Ryb25nPiBEZXRhaWwgYW55IHJlaW52ZXN0bWVudCBvZiB0aGUgcHJvY2VlZHMgaW50byBzaW1pbGFyIHByb3BlcnR5LCBpbmNsdWRpbmcgdHlwZXMgb2YgcHJvcGVydGllcyBhY3F1aXJlZCwgZGF0ZXMgb2YgYWNxdWlzaXRpb24sIGFuZCBhbW91bnRzIHJlaW52ZXN0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZWxpbmUgb2YgRXZlbnRzOjwvc3Ryb25nPiBQcm92aWRlIGEgdGltZWxpbmUgb2YgdGhlIGtleSBldmVudHMsIGZyb20gdGhlIGRhdGUgb2YgdGhlIGludm9sdW50YXJ5IGNvbnZlcnNpb24gdG8gdGhlIHJlaW52ZXN0bWVudCBvZiBwcm9jZWVkcywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBdHRhY2ggYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gc3VjaCBhcyBpbnN1cmFuY2Ugc2V0dGxlbWVudCBzdGF0ZW1lbnRzLCBwdXJjaGFzZSBjb250cmFjdHMgZm9yIHJlcGxhY2VtZW50IHByb3BlcnR5LCBvciBvZmZpY2lhbCBub3RpY2VzIG9mIGNvbmRlbW5hdGlvbi48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSBhbGwgcHJvdmlkZWQgaW5mb3JtYXRpb24gaXMgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRvIGZhY2lsaXRhdGUgYW4gZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBXZSdyZSBoZXJlIHRvIGFzc2lzdCB3aXRoIGFueSBxdWVzdGlvbnMgeW91IG1pZ2h0IGhhdmUgcmVnYXJkaW5nIHRoaXMgcmVxdWVzdC48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+SSBob3BlIHRoaXMgbWVzc2FnZSBmaW5kcyB5b3Ugd2VsbC4gQXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheGVzLCB3ZSBub3RpY2VkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgcmVudGFsIGluY29tZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIGV4cGxvcmUgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgbmVlZCBzb21lIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoaXMgcmVudGFsIGluY29tZS48L3A+XG48cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuPG9sPlxuICA8bGk+VGhlIGFkZHJlc3Mgb2YgdGhlIHByb3BlcnR5IGdlbmVyYXRpbmcgdGhlIHJlbnRhbCBpbmNvbWUuPC9saT5cbiAgPGxpPlRvdGFsIGFtb3VudCBvZiByZW50YWwgaW5jb21lIHJlY2VpdmVkIGluIHRoZSB0YXggeWVhci48L2xpPlxuICA8bGk+TW9udGhzIHRoZSBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dC48L2xpPlxuICA8bGk+QW55IHBlcmlvZHMgb2YgcGVyc29uYWwgdXNlIG9mIHRoZSByZW50YWwgcHJvcGVydHkuPC9saT5cbiAgPGxpPkEgc3VtbWFyeSBvZiBleHBlbnNlcyByZWxhdGVkIHRvIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG86IHByb3BlcnR5IG1hbmFnZW1lbnQgZmVlcywgbWFpbnRlbmFuY2UgYW5kIHJlcGFpcnMsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIGFuZCBtb3J0Z2FnZSBpbnRlcmVzdCAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgPGxpPkRldGFpbHMgb2YgYW55IG1ham9yIGltcHJvdmVtZW50cyBvciByZW5vdmF0aW9ucyBkb25lIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCB1cyBwYWludCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgeW91ciByZW50YWwgaW5jb21lLCBhbGxvd2luZyB1cyB0byBlbnN1cmUgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IGFwcGxpY2FibGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSByZXBvcnQgeW91ciBpbmNvbWUuIFlvdXIgY29vcGVyYXRpb24gaXMgZ3JlYXRseSBhcHByZWNpYXRlZCBhbmQgY3J1Y2lhbCBmb3IgdGhlIHRpbWVseSBhbmQgZWZmZWN0aXZlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy48L3A+XG48cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zLCBvciBpZiB0aGVyZSdzIGFueSBvdGhlciB3YXkgSSBjYW4gYXNzaXN0LCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gZ2V0IGluIHRvdWNoLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZHZhbmNlZCBSZW50XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQWR2YW5jZWQgUmVudFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGFkdmFuY2VkIHJlbnQgcGF5bWVudHMgdGhpcyB5ZWFyIGZvciB5b3VyIHJlbnRhbCBwcm9wZXJ0eS4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgYW1vdW50IG9mIGFkdmFuY2VkIHJlbnQgcmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSBzdW0gdG90YWwgb2YgYWxsIHJlbnQgcGF5bWVudHMgcmVjZWl2ZWQgaW4gYWR2YW5jZSAoY292ZXJpbmcgZnV0dXJlIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IG1vbnRoKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIHJlY2VpcHQ6PC9zdHJvbmc+IFRoZSBzcGVjaWZpYyBkYXRlKHMpIG9uIHdoaWNoIHlvdSByZWNlaXZlZCB0aGVzZSBhZHZhbmNlZCByZW50IHBheW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBwZXJpb2QgY292ZXJlZDo8L3N0cm9uZz4gVGhlIHJhbmdlIG9mIGRhdGVzIChzdGFydCBhbmQgZW5kKSB0aGF0IGVhY2ggYWR2YW5jZWQgcmVudCBwYXltZW50IGNvdmVycy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBhZGRyZXNzOjwvc3Ryb25nPiBUaGUgYWRkcmVzcyBvZiB0aGUgcmVudGFsIHByb3BlcnR5IGZvciB3aGljaCB0aGUgYWR2YW5jZWQgcmVudCB3YXMgcGFpZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MZWFzZSBhZ3JlZW1lbnQ6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50KHMpIHdpdGggdGhlIHRlbmFudChzKSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMgb2YgdGhlIGFkdmFuY2VkIHJlbnQgcGF5bWVudChzKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgcGFydGlhbCByZWZ1bmRzIGlzc3VlZDo8L3N0cm9uZz4gSWYgYW55IHJlZnVuZHMgd2VyZSBpc3N1ZWQgYWdhaW5zdCB0aGUgYWR2YW5jZWQgcmVudHMgcmVjZWl2ZWQsIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgYW5kIHJlc3BlY3RpdmUgYW1vdW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBwaXZvdGFsIGluIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgY29tcGxpYW50IHdpdGggcmVsZXZhbnQgdGF4IGxhd3MuIFBsZWFzZSBlbnN1cmUgdGhlIGRldGFpbHMgYXJlIGFjY3VyYXRlIGFuZCBjb21wbGV0ZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkxlYXNlIENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgaW4geW91ciBwcmVsaW1pbmFyeSB0YXggaW5mb3JtYXRpb24gdGhhdCB5b3UgcmVjZWl2ZWQgcGF5bWVudCBmcm9tIGEgdGVuYW50IGZvciBlYXJseSBsZWFzZSBjYW5jZWxsYXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgYW5kIGFzc2VzcyBhbnkgdGF4IGltcGxpY2F0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkxlYXNlIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBsZWFzZSBhZ3JlZW1lbnQgd2l0aCB0aGUgdGVuYW50IHdobyBwYWlkIHRvIHRlcm1pbmF0ZSB0aGVpciBsZWFzZSBlYXJseS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QW1lbmRtZW50IG9yIFRlcm1pbmF0aW9uIEFncmVlbWVudDo8L3N0cm9uZz4gQW55IGRvY3VtZW50cyB0aGF0IGZvcm1hbGx5IGFja25vd2xlZGdlIHRoZSBlYXJseSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGVhc2UsIGluY2x1ZGluZyBhbnkgcGVuYWx0aWVzLCB0aGUgdGVybWluYXRpb24gZGF0ZSwgYW5kIG90aGVyIHJlbGV2YW50IHRlcm1zLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5QYXltZW50IFJlY29yZHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb2YgdGhlIHBheW1lbnQgcmVjZWl2ZWQgZm9yIGxlYXNlIHRlcm1pbmF0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHRyYW5zYWN0aW9uLCBhIHJlY2VpcHQgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCwgb3IgYW55IHdyaXR0ZW4gYWdyZWVtZW50IHNwZWNpZnlpbmcgdGhlIGFtb3VudC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q29tbXVuaWNhdGlvbiBFdmlkZW5jZTo8L3N0cm9uZz4gQ29waWVzIG9mIGFueSB3cml0dGVuIGNvbW11bmljYXRpb24gYmV0d2VlbiB5b3UgYW5kIHRoZSB0ZW5hbnQgcmVnYXJkaW5nIHRoZSBsZWFzZSBjYW5jZWxsYXRpb24gYW5kIHRoZSBhZ3JlZW1lbnQgdG8gdGVybWluYXRlIGVhcmx5LCBpbmNsdWRpbmcgZW1haWxzIG9yIGxldHRlcnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoZXNlIGRvY3VtZW50cyBhcmUgY3J1Y2lhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGNvcnJlY3QgdGF4IHRyZWF0bWVudCBvZiB0aGUgbGVhc2UgY2FuY2VsbGF0aW9uIHBheW1lbnQgeW91IHJlY2VpdmVkLiBUaGV5IHdpbGwgaGVscCB0byBlbnN1cmUgdGhhdCB3ZSByZXBvcnQgeW91ciBpbmNvbWUgYWNjdXJhdGVseSBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2YgYW55IHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzLjwvcD5cbiAgICA8cD48c3Ryb25nPkFjdGlvbiBSZXF1aXJlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHByZXBhcmF0aW9uLiBZb3UgbWF5IHNlbmQgdGhlbSB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tLCBvciB1cGxvYWQgdGhyb3VnaCBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSdyZSBoZXJlIHRvIGhlbHAhPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUGFpZCBBZHZhbmNlIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MsIHdlJ3ZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgcGF5bWVudHMgZm9yIGluc3VyYW5jZSBwcmVtaXVtcyBvciBzaW1pbGFyIGNvc3RzIHJlbGF0ZWQgdG8geW91ciByZW50YWwgcHJvcGVydHksIHdoaWNoIGNvdmVyIHBlcmlvZHMgYmV5b25kIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMgaW4geW91ciB0YXggZmlsaW5ncywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgPGxpPjxzdHJvbmc+RG9jdW1lbnRhdGlvbiBvZiBQYWlkIEV4cGVuc2VzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhbGwgcmVjZWlwdHMsIGludm9pY2VzLCBvciBjb250cmFjdHMgc2hvd2luZyB0aGUgcGF5bWVudCBvZiBpbnN1cmFuY2UgcHJlbWl1bXMgb3Igc2ltaWxhciBleHBlbnNlcy4gVGhpcyBzaG91bGQgY2xlYXJseSBpbmRpY2F0ZSB0aGUgYW1vdW50IHBhaWQsIHRoZSBkYXRlIG9mIHBheW1lbnQsIGFuZCB0aGUgY292ZXJhZ2UgcGVyaW9kLjwvbGk+XG4gIDxsaT48c3Ryb25nPkNvdmVyYWdlIFBlcmlvZCBEZXRhaWxzOjwvc3Ryb25nPiBXZSBuZWVkIHNwZWNpZmljIGRldGFpbHMgcmVnYXJkaW5nIHRoZSBjb3ZlcmFnZSBwZXJpb2QgZm9yIGVhY2ggZXhwZW5zZS4gUGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvciBhIHdyaXR0ZW4gc3VtbWFyeSB0aGF0IHNwZWNpZmllcyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiB0aGUgY292ZXJhZ2UgcGVyaW9kcyB0aGF0IGV4dGVuZCBiZXlvbmQgdGhlIGN1cnJlbnQgeWVhci48L2xpPlxuICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gQ29uZmlybSB0aGUgYWRkcmVzcyBvciBpZGVudGlmaWNhdGlvbiBvZiB0aGUgcmVudGFsIHByb3BlcnR5KGllcykgdG8gd2hpY2ggdGhlc2UgZXhwZW5zZXMgYXBwbHkuPC9saT5cbiAgPGxpPjxzdHJvbmc+UHVycG9zZSBvZiB0aGUgRXhwZW5zZTo8L3N0cm9uZz4gRm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIHByb3ZpZGUgYSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgbmF0dXJlIG9mIGVhY2ggZXhwZW5zZSAoZS5nLiwgcHJvcGVydHkgaW5zdXJhbmNlLCBsaWFiaWxpdHkgaW5zdXJhbmNlKS48L2xpPlxuPC9vbD5cbjxwPlBsZWFzZSByZW1lbWJlciB0aGF0IGhhdmluZyBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIHdpbGwgYWlkIGluIGVuc3VyaW5nIHRoYXQgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgY29ycmVjdGx5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZXNlIHByZXBhaWQgZXhwZW5zZXMuPC9wPlxuPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJlbmVmaXQgVmFsdWUgSW5jcmVhc2VcIixcbiAgICBhY3Rpb25UaXRsZTogXCJCZW5lZml0IFZhbHVlIEluY3JlYXNlXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGluIHByb3ZpZGluZyBuZWNlc3NhcnkgZG9jdW1lbnRzIGZvciB0YXggcHJlcGFyYXRpb24uIFxuICAgIEFzIHBlciB5b3VyIHJlc3BvbnNlIGluZGljYXRpbmcgcGF5bWVudCBmb3IgbG9jYWwgaW1wcm92ZW1lbnRzIFxuICAgIG9yIHNlcnZpY2VzIHRoYXQgZGlyZWN0bHkgaW5jcmVhc2UgdGhlIHZhbHVlIG9mIHlvdXIgcmVudGFsIHByb3BlcnR5LCBcbiAgICB3ZSBuZWVkIGZ1cnRoZXIgZGV0YWlscyB0byBlbnN1cmUgdGhlIGFjY3VyYXRlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgaW1wcm92ZW1lbnQgb3Igc2VydmljZSBwcm92aWRlZCAoZS5nLiwgc3RyZWV0IHJlcGFpcnMsIG5ldyBzaWRld2Fsa3MpLjwvbGk+XG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlLjwvbGk+XG4gICAgICAgIDxsaT5Ub3RhbCBjb3N0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIGltcHJvdmVtZW50IG9yIHNlcnZpY2UuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudCBvciBzZXJ2aWNlIChyZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBldGMuKS48L2xpPlxuICAgICAgICA8bGk+QW55IG9mZmljaWFsIG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBsb2NhbCBtdW5pY2lwYWxpdHkgcmVnYXJkaW5nIHRoZSBpbXByb3ZlbWVudHMgb3IgY2hhcmdlcy48L2xpPlxuICAgICAgICA8bGk+RGV0YWlscyBvZiBob3cgdGhlIGltcHJvdmVtZW50IG9yIHNlcnZpY2Ugc3BlY2lmaWNhbGx5IGJlbmVmaXRlZCB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHBvdGVudGlhbCB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIGFzc29jaWF0ZWQgd2l0aCBwcm9wZXJ0eSB2YWx1ZSBpbmNyZWFzZXMgZHVlIHRvIGxvY2FsIGltcHJvdmVtZW50cyBvciBzZXJ2aWNlcy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvbid0IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZmFjaWxpdGF0ZSB0aGUgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggZG9jdW1lbnRhdGlvbi48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZmVpdGVkIFNlY3VyaXR5IERlcG9zaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JmZWl0ZWQgU2VjdXJpdHkgRGVwb3NpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgeW91ciB0YXggZmlsaW5ncyBhcmUgYWNjdXJhdGUgYW5kIGNvbXBsaWFudCwgd2UndmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIG9uZSBvciBtb3JlIHRlbmFudHMgd2hvIGRpZCBub3QgZ2V0IHRoZWlyIHNlY3VyaXR5IGRlcG9zaXQgYmFjayB0aGlzIHllYXIgZHVlIHRvIGVpdGhlciBicmVha2luZyB0aGUgbGVhc2UgdGVybXMgb3IgbGVhdmluZyBkYW1hZ2UgcmVxdWlyaW5nIHJlcGFpci48L3A+XG4gICAgPHA+VG8gcHJvY2VlZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+QSBsaXN0IG9mIGVhY2ggdGVuYW50IHdob3NlIHNlY3VyaXR5IGRlcG9zaXQgd2FzIGZvcmZlaXRlZCwgaW5jbHVkaW5nOjwvbGk+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+VGVuYW50J3MgbmFtZTwvbGk+XG4gICAgICAgICAgPGxpPlJlbnRhbCBhZGRyZXNzPC9saT5cbiAgICAgICAgICA8bGk+RGF0ZSBvZiBsZWFzZSB0ZXJtaW5hdGlvbjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIGV2aWRlbmNpbmcgdGhlIGZvcmZlaXR1cmUgcmVhc29uLCBzdWNoIGFzOjwvbGk+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgbGVhc2UgYWdyZWVtZW50IHNob3dpbmcgdGhlIGJyZWFjaGVkIHRlcm1zPC9saT5cbiAgICAgICAgICA8bGk+UGhvdG9zIG9yIHJlcGFpciBpbnZvaWNlcyBmb3IgZGFtYWdlcyBjYXVzZWQgYnkgdGhlIHRlbmFudDwvbGk+XG4gICAgICAgICAgPGxpPkFueSB3cml0dGVuIG5vdGljZXMgcHJvdmlkZWQgdG8gdGhlIHRlbmFudCByZWdhcmRpbmcgdGhlIGZvcmZlaXR1cmU8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBmb3JmZWl0ZWQgc2VjdXJpdHkgZGVwb3NpdC48L2xpPlxuICAgICAgPGxpPkFueSByZWNlaXB0cyBvciBpbnZvaWNlcyBmb3IgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgcmVhc29ucyBmb3Igc2VjdXJpdHkgZGVwb3NpdCBmb3JmZWl0dXJlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoaXMgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgaW4gYSBjbGVhciBhbmQgb3JnYW5pemVkIG1hbm5lciB0byBmYWNpbGl0YXRlIGEgc21vb3RoIGFuZCBlZmZpY2llbnQgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gVGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOb24tQ2FzaCBSZW50XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTm9uLUNhc2ggUmVudFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIG5vdGUgZnJvbSB5b3VyIGVhcmxpZXIgcmVzcG9uc2VzIHRoYXQgeW91IGhhdmUgcmVjZWl2ZWQgbm9uLWNhc2ggZm9ybXMgb2YgcGF5bWVudCBpbiBsaWV1IG9mIHJlbnQgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIG9uIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGVzZSB0cmFuc2FjdGlvbnMuIEtpbmRseSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiBTZXJ2aWNlIG9yIEdvb2RzIFJlY2VpdmVkOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzZXJ2aWNlLCBnb29kcywgb3IgcHJvcGVydHkgeW91IHJlY2VpdmVkIGFzIHJlbnQgcGF5bWVudC4gRm9yIGluc3RhbmNlLCBcIlJlcGFpciBzZXJ2aWNlcyBmb3IgdGhlIGtpdGNoZW4gcGx1bWJpbmdcIiBvciBcImEgbGFwdG9wIGNvbXB1dGVyXCIuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5WYWx1ZSBFc3RpbWF0aW9uOjwvc3Ryb25nPiBBbiBlc3RpbWF0ZWQgdmFsdWUgb2YgdGhlIHNlcnZpY2UsIGdvb2RzLCBvciBwcm9wZXJ0eSByZWNlaXZlZCBhdCB0aGUgdGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIHBvc3NpYmxlLCBpbmNsdWRlIGFueSBkb2N1bWVudGF0aW9uIHRoYXQgc3VwcG9ydHMgdGhpcyB2YWx1YXRpb24sIHN1Y2ggYXMgcmVjZWlwdHMsIGludm9pY2VzLCBvciB3cml0dGVuIGFncmVlbWVudHMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EYXRlKHMpIG9mIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBTcGVjaWZpYyBkYXRlKHMpIHdoZW4geW91IHJlY2VpdmVkIHRoZXNlIGdvb2RzIG9yIHNlcnZpY2VzLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SW5mb3JtYXRpb24gYWJvdXQgdGhlIFRlbmFudCBvciBQcm92aWRlcjo8L3N0cm9uZz4gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBwcm92aWRlZCB0aGUgZ29vZHMgb3Igc2VydmljZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5BbnkgRm9ybWFsIEFncmVlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgd3JpdHRlbiBhZ3JlZW1lbnRzIG9yIGNvbnRyYWN0cyB0aGF0IG91dGxpbmUgdGhpcyBhcnJhbmdlbWVudC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlY2VpcHRzIG9yIERvY3VtZW50YXRpb24gb2YgdGhlIFRyYW5zYWN0aW9uOjwvc3Ryb25nPiBBbnkgcmVjZWlwdHMsIGludm9pY2VzLCBvciBvdGhlciBkb2N1bWVudGF0aW9uIHRoYXQgZXZpZGVuY2VzIHRoZSBleGNoYW5nZS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVmbGVjdGluZyB5b3VyIGluY29tZS4gWW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlIHdpbGwgZ3JlYXRseSBhc3Npc3QgaW4gY29tcGxldGluZyB5b3VyIHRheCBwcmVwYXJhdGlvbiBlZmZpY2llbnRseS48L3A+XG4gICAgPHA+UGxlYXNlIHN1Ym1pdCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRpbWVseSBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybi4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgUHJvcGVydHkgRGVwcmVjaWF0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFByb3BlcnR5IERlcHJlY2lhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIHJldmlld2luZyB5b3VyIGFjY291bnRzLCB3ZSd2ZSBub3RlZCB0aGF0IGFsbCB5b3VyIHJlbnRhbCBwcm9wZXJ0aWVzIGFyZSBjdXJyZW50bHkgYmVpbmcgZGVwcmVjaWF0ZWQgYXMgcGFydCBvZiB0aGVpciB0YXggdHJlYXRtZW50IGluIG91ciBmaW5hbmNpYWwgcmVjb3Jkcy4gVGhpcyBtZXRob2QgaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgZmluYW5jaWFsIHJlcG9ydGluZyBhbmQgdGF4IGVmZmljaWVuY3kuIEhvd2V2ZXIsIGl0IGhhcyBjb21lIHRvIG91ciBhdHRlbnRpb24gdGhhdCB0aGVyZSBtYXkgYmUgZGlzY3JlcGFuY2llcyBvciB1cGRhdGVzIHJlcXVpcmVkIGluIG91ciByZWNvcmRzIHJlZ2FyZGluZyB0aGUgZGVwcmVjaWF0aW9uIG9mIHlvdXIgcmVudGFsIHByb3BlcnRpZXMuPC9wPlxuICAgIDxwPlRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGludGVncml0eSBvZiB5b3VyIGZpbmFuY2lhbCBhbmQgdGF4IHJlcG9ydGluZywgd2Uga2luZGx5IHJlcXVlc3QgeW91ciBhc3Npc3RhbmNlIGluIHZlcmlmeWluZyB0aGUgY3VycmVudCBzdGF0dXMgb2YgeW91ciByZW50YWwgcHJvcGVydGllcyB3aXRoIHJlZ2FyZHMgdG8gZGVwcmVjaWF0aW9uLjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPkNvbmZpcm0gd2hldGhlciBhbGwgeW91ciByZW50YWwgcHJvcGVydGllcyBhcmUgYmVpbmcgZGVwcmVjaWF0ZWQgaW4gb3VyIGJvb2tzLiBJZiB0aGlzIGlzIGFjY3VyYXRlLCBubyBhY3Rpb24gaXMgcmVxdWlyZWQgb24geW91ciBwYXJ0LjwvbGk+XG4gICAgPGxpPklmIHRoZXJlIGFyZSBhbnkgcmVudGFsIHByb3BlcnRpZXMgPHN0cm9uZz5ub3Q8L3N0cm9uZz4gY3VycmVudGx5IGJlaW5nIGRlcHJlY2lhdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgZm9yIGVhY2ggcHJvcGVydHk6PC9saT5cbiAgICAgICAgPHVsPlxuICAgICAgICAgICAgPGxpPlByb3BlcnR5IEFkZHJlc3M8L2xpPlxuICAgICAgICAgICAgPGxpPkRhdGUgb2YgUHVyY2hhc2U8L2xpPlxuICAgICAgICAgICAgPGxpPlB1cmNoYXNlIFByaWNlPC9saT5cbiAgICAgICAgICAgIDxsaT5SZWFzb24gZm9yIE5vbi1EZXByZWNpYXRpb248L2xpPlxuICAgICAgICAgICAgPGxpPkFueSBhZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQgYW5kIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3VyIGZpbmFuY2lhbCByZWNvcmRzIGFjY3VyYXRlbHkgcmVmbGVjdCB5b3VyIHRheCBvYmxpZ2F0aW9ucyBhbmQgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgZm9yIHJldmlzaW9ucyBhbmQgdXBkYXRlcyBhcyBuZWNlc3NhcnkuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gV2UgYXJlIGhlcmUgdG8gc3VwcG9ydCB5b3UgaW4gbWFpbnRhaW5pbmcgcHJlY2lzZSBhbmQgY29tcGxpYW50IGZpbmFuY2lhbCByZWNvcmRzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBvdXIgc2VydmljZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJlbnRhbCBSZXBhaXJzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIFJlcGFpcnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgbm90ZWQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIG1ha2luZyBuZWNlc3NhcnkgcmVwYWlycyB0byB5b3VyIHJlbnRhbCBwcm9wZXJ0eSB0byBrZWVwIGl0IGluIGdvb2Qgd29ya2luZyBjb25kaXRpb24uIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGV4cGVuc2VzIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIHRheCBiZW5lZml0cywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGFsbCByZXBhaXJzIG1hZGUgZHVyaW5nIHRoZSB0YXggeWVhci4gUGxlYXNlIGluY2x1ZGU6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBuYXR1cmUgb2YgZWFjaCByZXBhaXIgKGUuZy4sIGZpeGluZyBsZWFrcywgcGFpbnRpbmcsIHJlcGFpcmluZyBhcHBsaWFuY2VzKS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBlYWNoIHJlcGFpciB3YXMgY29tcGxldGVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBsb2NhdGlvbi9hZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eSB3aGVyZSByZXBhaXJzIHdlcmUgbWFkZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPlJlY2VpcHRzIG9yIGludm9pY2VzIGZvciBlYWNoIHJlcGFpciBtYWRlLiBUaGlzIHNob3VsZCBpbmNsdWRlOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgc2VydmljZSBwcm92aWRlcuKAmXMgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbi48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgYW1vdW50IHBhaWQgZm9yIGVhY2ggcmVwYWlyLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBtZXRob2Qgb2YgcGF5bWVudCB1c2VkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+SWYgYW55IHJlcGFpcnMgd2VyZSBtYWRlIGJ5IHlvdXJzZWxmIG9yIGFuIHVubGljZW5zZWQgY29udHJhY3RvciwgcGxlYXNlIHByb3ZpZGU6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdvcmsgcGVyZm9ybWVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRoZSBjb3N0IG9mIG1hdGVyaWFscyBwdXJjaGFzZWQsIHN1cHBvcnRlZCBieSByZWNlaXB0cy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyBzcGVudCBvbiBlYWNoIHJlcGFpciwgYWxvbmcgd2l0aCBhIHJlYXNvbmFibGUgaG91cmx5IHJhdGUgZm9yIGxhYm9yLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIG5vdGUgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIHVzIHRvIG9wdGltaXplIHlvdXIgdGF4IGRlZHVjdGlvbnMgcmVsYXRlZCB0byBwcm9wZXJ0eSByZXBhaXIgZXhwZW5zZXMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgaXMgbmVlZGVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSZW50YWwgSW1wcm92ZW1lbnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVudGFsIEltcHJvdmVtZW50c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIG1hZGUgdXBncmFkZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHlvdXIgcmVudGFsIHByb3BlcnR5IHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhlc2UgaW1wcm92ZW1lbnRzIGludG8geW91ciB0YXggZG9jdW1lbnRhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uIG9mIEVhY2ggSW1wcm92ZW1lbnQ6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCB1cGdyYWRlIG9yIGVuaGFuY2VtZW50IG1hZGUgdG8gdGhlIHByb3BlcnR5LiBUaGlzIGNvdWxkIGluY2x1ZGUgcmVub3ZhdGlvbnMsIGFkZGl0aW9ucywgb3IgYW55IHVwZ3JhZGVzIHRoYXQgaGF2ZSBpbmNyZWFzZWQgaXRzIHZhbHVlLCBleHRlbmRlZCBpdHMgbGlmZXNwYW4sIG9yIGFkYXB0ZWQgaXQgdG8gbmV3IHVzZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZXMgb2YgSW1wcm92ZW1lbnRzOjwvc3Ryb25nPiBUaGUgZXhhY3QgZGF0ZSBvciByYW5nZSBvZiBkYXRlcyB3aGVuIHRoZSBpbXByb3ZlbWVudHMgd2VyZSBzdGFydGVkIGFuZCBjb21wbGV0ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHMgSW52b2x2ZWQ6PC9zdHJvbmc+IERldGFpbGVkIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCBpbXByb3ZlbWVudCBwcm9qZWN0LiBUaGlzIGluY2x1ZGVzIG1hdGVyaWFscywgbGFib3IsIHBlcm1pdHMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29zdHMuIFBsZWFzZSBwcm92aWRlIGl0ZW1pemVkIHJlY2VpcHRzIG9yIGludm9pY2VzIGlmIGF2YWlsYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBQYXltZW50Ojwvc3Ryb25nPiBDb3BpZXMgb2YgY2FuY2VsbGVkIGNoZWNrcywgYmFuayBzdGF0ZW1lbnRzLCBvciBlbGVjdHJvbmljIHBheW1lbnQgY29uZmlybWF0aW9ucyB0aGF0IHByb3ZlIHBheW1lbnQgZm9yIHRoZSBpbXByb3ZlbWVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+QmVmb3JlIGFuZCBBZnRlciBQaWN0dXJlczo8L3N0cm9uZz4gSWYgYXZhaWxhYmxlLCBwaG90b2dyYXBocyBvZiB0aGUgcHJvcGVydHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgaW1wcm92ZW1lbnRzIHdlcmUgbWFkZS4gVGhpcyBoZWxwcyBpbiBzdWJzdGFudGlhdGluZyB0aGUgZW5oYW5jZW1lbnQgdG8geW91ciBwcm9wZXJ0eSdzIHZhbHVlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyYWN0b3IgSW5mb3JtYXRpb246PC9zdHJvbmc+IElmIGNvbnRyYWN0b3JzIHdlcmUgdXNlZCwgcGxlYXNlIHByb3ZpZGUgdGhlaXIgYnVzaW5lc3MgbmFtZXMsIGFkZHJlc3NlcywgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wdXRpbmcgcG90ZW50aWFsIHRheCBkZWR1Y3Rpb25zIG9yIGJlbmVmaXRzIHRoYXQgbWF5IGJlIGFwcGxpY2FibGUgdG8geW91IGFzIGEgcmVzdWx0IG9mIHRoZXNlIHByb3BlcnR5IGltcHJvdmVtZW50cy4gUGxlYXNlIGVuc3VyZSBhbGwgZG9jdW1lbnRzIGFyZSBnYXRoZXJlZCBhbmQgc3VibWl0dGVkIGFzIHNvb24gYXMgcG9zc2libGUsIHRvIGVuc3VyZSB0aW1lbHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm5zLjwvcD5cbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVudGFsIEFjdGl2aXR5IFBhcnRpY2lwYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJSZW50YWwgQWN0aXZpdHkgUGFydGljaXBhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHdlIG1vdmUgZm9yd2FyZCB3aXRoIHlvdXIgdGF4IHByZXBhcmF0aW9uLCBpdCBoYXMgYmVjb21lIG5lY2Vzc2FyeSB0byBjb2xsZWN0IGEgYml0IG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHlvdXIgYWN0aXZlIHBhcnRpY2lwYXRpb24gaW4gcmVudGFsIHByb3BlcnR5IGFjdGl2aXRpZXMuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgcGFzc2luZyBzcGVjaWZpYyB0YXggdGVzdHMgdGhhdCBhcHBseSB0byBpbmRpdmlkdWFscyBhY3RpdmVseSBpbnZvbHZlZCBpbiB0aGVpciByZW50YWwgcHJvcGVydGllcy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGRldGFpbHMgdG8gZW5zdXJlIHdlIG1lZXQgYWxsIHJlcXVpcmVtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgeW91ciBhY3RpdmUgcm9sZXMgdGhpcyB0YXggeWVhci4gVGhpcyBpbmNsdWRlcyBtYWtpbmcgZGVjaXNpb25zIHN1Y2ggYXMgYXBwcm92aW5nIG5ldyB0ZW5hbnRzLCBzZXR0aW5nIHJlbnRhbCB0ZXJtcywgb3IgYXV0aG9yaXppbmcgcmVwYWlycyBhbmQgbWFpbnRlbmFuY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGltZSBTcGVudDo8L3N0cm9uZz4gQW4gZXN0aW1hdGVkIG51bWJlciBvZiBob3VycyB5b3UgcGVyc29uYWxseSBzcGVudCBvbiBhY3Rpdml0aWVzIHJlbGF0ZWQgdG8gdGhlIG1hbmFnZW1lbnQgYW5kIGRlY2lzaW9uLW1ha2luZyBvZiB5b3VyIHJlbnRhbCBwcm9wZXJ0eS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZWNpc2lvbiBSZWNvcmRzOjwvc3Ryb25nPiBBbnkgYXZhaWxhYmxlIHJlY29yZHMgb3IgY29ycmVzcG9uZGVuY2UgdGhhdCBzaG93Y2FzZSB5b3VyIGludm9sdmVtZW50IGluIGtleSBkZWNpc2lvbnMgKGUtbWFpbHMsIHNpZ25lZCBkb2N1bWVudHMsIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb3BlcnR5IE1hbmFnZW1lbnQgRW5nYWdlbWVudDo8L3N0cm9uZz4gSWYgeW91J3ZlIGVuZ2FnZWQgd2l0aCBhIHByb3BlcnR5IG1hbmFnZXIsIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgcm9sZSB2ZXJzdXMgdGhlIHRhc2tzIHlvdSBwZXJzb25hbGx5IGhhbmRsZSB3b3VsZCBiZSBoZWxwZnVsLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZXNlIHNwZWNpZmljcyB3aWxsIGdyZWF0bHkgZmFjaWxpdGF0ZSB0aGUgYWNjdXJhdGUgYW5kIGFkdmFudGFnZW91cyBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybiByZWdhcmRpbmcgcmVudGFsIGFjdGl2aXRpZXMuIElmIHRoZXJlIGFyZSBhbnkgYXNwZWN0cyBvZiB0aGlzIHJlcXVlc3QgdGhhdCByZXF1aXJlIGNsYXJpZmljYXRpb24sIG9yIGlmIGFzc2lzdGFuY2UgaXMgbmVlZGVkLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91J3ZlIHNwZW50IG1vcmUgdGhhbiBoYWxmIG9mIHlvdXIgd29ya2luZyB0aW1lIGluIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhpcyB0YXggeWVhci4gVG8gcHJvcGVybHkgZXZhbHVhdGUgeW91ciBlbGlnaWJpbGl0eSBmb3IgdGF4IGJlbmVmaXRzIGFzIGEgUmVhbCBFc3RhdGUgUHJvZmVzc2lvbmFsLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgIDxsaT48c3Ryb25nPlN1bW1hcnkgb2YgQW5udWFsIFdvcmtpbmcgSG91cnM6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGEgZGV0YWlsZWQgc3VtbWFyeSBvZiB5b3VyIHRvdGFsIHdvcmtpbmcgaG91cnMgdGhpcyB5ZWFyLCBzcGVjaWZ5aW5nIHRoZSBudW1iZXIgb2YgaG91cnMgZGVkaWNhdGVkIHRvIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBSZWFsIEVzdGF0ZSBBY3Rpdml0aWVzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHN1Y2ggYXMgY29udHJhY3RzLCBlbmdhZ2VtZW50IGxldHRlcnMsIG9yIGNsaWVudCBpbnZvaWNlcyB0aGF0IHByb3ZlIHlvdXIgcGFydGljaXBhdGlvbiBpbiByZWFsIGVzdGF0ZSBhY3Rpdml0aWVzIChlLmcuLCBzYWxlcywgbGVhc2luZywgbWFuYWdlbWVudCkuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5MaXN0IG9mIFByb3BlcnRpZXM6PC9zdHJvbmc+IEEgbGlzdCBvZiBwcm9wZXJ0aWVzIHlvdSBoYXZlIG1hbmFnZWQsIHNvbGQsIG9yIGFyZSBjdXJyZW50bHkgc2VsbGluZywgaW5jbHVkaW5nIHRoZWlyIGxvY2F0aW9uIGFuZCB0aGUgbmF0dXJlIG9mIHlvdXIgaW52b2x2ZW1lbnQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBKb2IgRGVzY3JpcHRpb246PC9zdHJvbmc+IEEgYnJpZWYgb3V0bGluZSBvZiB5b3VyIHJvbGUocykgaW4gcmVhbCBlc3RhdGUgYWN0aXZpdGllcywgc3BlY2lmeWluZyB3aGV0aGVyIHlvdXIgaW52b2x2ZW1lbnQgaXMgcHJpbWFyaWx5IGFzIGEgYnJva2VyLCBhZ2VudCwgcHJvcGVydHkgbWFuYWdlciwgZXRjLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+UmVhbCBFc3RhdGUgTGljZW5zZXMgb3IgQ2VydGlmaWNhdGlvbnM6PC9zdHJvbmc+IENvcGllcyBvZiBhbnkgbGljZW5zZXMgb3IgY2VydGlmaWNhdGlvbnMgdGhhdCB2YWxpZGF0ZSB5b3VyIHByb2Zlc3Npb25hbCBzdGF0dXMgaW4gdGhlIHJlYWwgZXN0YXRlIHNlY3Rvci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkNhbGVuZGFyIG9yIFNjaGVkdWxlOjwvc3Ryb25nPiBJZiBhdmFpbGFibGUsIGEgY2FsZW5kYXIgb3Igc2NoZWR1bGUgcmVmbGVjdGluZyB5b3VyIHJlYWwgZXN0YXRlIGFjdGl2aXRpZXMgdGhyb3VnaG91dCB0aGUgeWVhciB0byBoZWxwIGNvcnJvYm9yYXRlIHRoZSB0aW1lIHNwZW50IGluIHRoZXNlIGFjdGl2aXRpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCB0aGlzIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gdXMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJucy4gWW91ciBwcm9tcHQgcmVzcG9uc2UgaXMgZ3JlYXRseSBhcHByZWNpYXRlZC4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUGFydGlhbCBSZW50YWwgUHJvcGVydHlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFJlbnRhbCBQcm9wZXJ0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgbGV0dGluZyB1cyBrbm93IHRoYXQgeW91IHJlbnRlZCBvdXQgYSBwb3J0aW9uIG9mIHlvdXIgcHJvcGVydHkgdGhpcyB0YXggeWVhciB3aGlsZSB1c2luZyB0aGUgcmVzdCBmb3IgcGVyc29uYWwgcHVycG9zZXMuIFRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGJlc3QgdGF4IGFkdmFudGFnZXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBwYXJ0aWFsIHJlbnRhbCBwcm9wZXJ0eTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Db21wbGV0ZSBhZGRyZXNzIG9mIHRoZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5EZXNjcmlwdGlvbiBvZiB0aGUgcmVudGVkIHBvcnRpb24gYW5kIHRoZSBwZXJzb25hbCB1c2UgcG9ydGlvbi48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz5cbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+Q29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5TdGFydCBhbmQgZW5kIGRhdGVzIG9mIHRoZSByZW50YWwgcGVyaW9kIHdpdGhpbiB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBJbmNvbWU6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBhZHZhbmNlIHJlbnQgb3Igc2VjdXJpdHkgZGVwb3NpdHMgbm90IHJldHVybmVkIHRvIHRoZSB0ZW5hbnQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkV4cGVuc2VzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgZXhwZW5zZXMgZm9yIHRoZSByZW50YWwgcHJvcGVydHksIGluY2x1ZGluZyByZXBhaXJzLCB1dGlsaXRpZXMsIGluc3VyYW5jZSwgYW5kIHByb3BlcnR5IHRheGVzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGV4cGVuc2VzIHNoYXJlZCBiZXR3ZWVuIHRoZSByZW50YWwgYW5kIHBlcnNvbmFsIHVzZSBwb3J0aW9ucywgYW5kIGhvdyB0aGV5IGFyZSBkaXZpZGVkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Vc2Ugb2YgUHJvcGVydHk6PC9zdHJvbmc+XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlRvdGFsIG51bWJlciBvZiBkYXlzIHJlbnRlZCBhdCBmYWlyIHJlbnRhbCB2YWx1ZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW1wcm92ZW1lbnRzIGFuZCBSZXBhaXJzOjwvc3Ryb25nPlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBpbXByb3ZlbWVudHMgb3IgcmVwYWlycyBtYWRlIHNwZWNpZmljYWxseSBpbiB0aGUgcmVudGFsIHBvcnRpb24gYW5kIHRoZSBjb3N0IGludm9sdmVkLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkZXRhaWxzIGFuZCBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gVGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgdGhpcyBpbmZvcm1hdGlvbiBhcmUgY3J1Y2lhbCBmb3IgY29ycmVjdCB0YXggZmlsaW5nIGFuZCBvcHRpbWl6aW5nIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMgYW5kIHRheCBiZW5lZml0cy48L3A+XG4gICAgPHA+RG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dCBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJzb25hbCBVc2UgUmVudGFsXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUGVyc29uYWwgVXNlIFJlbnRhbFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSBpbmRpY2F0ZWQgdXNpbmcgeW91ciByZW50YWwgcHJvcGVydHkgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGR1cmluZyB0aGUgbGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3Nlczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIGV4YWN0IG51bWJlciBvZiBkYXlzIGR1cmluZyB0aGUgdGF4IHllYXIgd2hlbiB0aGUgcHJvcGVydHkgd2FzIHVzZWQgYnkgeW91LCB5b3VyIGZhbWlseSwgb3IgZnJpZW5kcyB3aXRob3V0IGNoYXJnaW5nIHJlbnQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgZGF5cyByZW50ZWQgYXQgZmFpciByZW50YWwgcHJpY2U6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIG51bWJlciBvZiBkYXlzIHRoZSBwcm9wZXJ0eSB3YXMgYWN0dWFsbHkgcmVudGVkIG91dCB0byB0ZW5hbnRzIGF0IGEgZmFpciByZW50YWwgcHJpY2UuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIGluY29tZSByZWNlaXZlZDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgdG90YWwgYW1vdW50IG9mIHJlbnRhbCBpbmNvbWUgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhciBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5SZW50YWwgZXhwZW5zZXM6PC9zdHJvbmc+IFByb3ZpZGUgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgdGhlIHByb3BlcnR5LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzaW5nLCBjbGVhbmluZyBhbmQgbWFpbnRlbmFuY2UsIHV0aWxpdGllcywgaW5zdXJhbmNlLCBwcm9wZXJ0eSB0YXhlcywgbW9ydGdhZ2UgaW50ZXJlc3QsIGFuZCBhbnkgcmVwYWlycy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5JbXByb3ZlbWVudHMgYW5kIGRhdGVzOjwvc3Ryb25nPiBMaXN0IGFueSBpbXByb3ZlbWVudHMgbWFkZSB0byB0aGUgcHJvcGVydHkgZHVyaW5nIHRoZSB0YXggeWVhciwgYWxvbmcgd2l0aCB0aGUgZGF0ZSBvZiBpbXByb3ZlbWVudCBhbmQgdGhlIGNvc3QuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IFN0YXRlbWVudCBhbmQgTW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50Ojwvc3Ryb25nPiBBdHRhY2ggYSBjb3B5IG9mIHlvdXIgYW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnQgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudCBmb3IgdGhpcyBwcm9wZXJ0eS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBlbmFibGUgdXMgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgcG9ydGlvbiBvZiBleHBlbnNlcyB0aGF0IGNhbiBiZSBkZWR1Y3RlZCBhbmQgcmVwb3J0IHlvdXIgaW5jb21lIGFjY3VyYXRlbHkuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBjbGFyaWZpY2F0aW9uIG9uIHdoYXQgY291bnRzIGFzIHBlcnNvbmFsIHVzZSB2ZXJzdXMgcmVudGFsIHVzZSwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD4gIFxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQYXJ0aWFsIFBlcnNvbmFsIFVzZSBSZW50YWxcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSB1bmRlcnN0YW5kIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIHJlbnRpbmcgb3V0IHBhcnQgb2YgeW91ciBwcm9wZXJ0eSBmb3IgcHJvZml0LCB3aGlsZSBhbHNvIHVzaW5nIGl0IGluIGEgbWFubmVyIHRoYXQgbWF5IGNsYXNzaWZ5IGl0IGFzIHlvdXIgcmVzaWRlbmNlLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgYWxsIGluZm9ybWF0aW9uIGFuZCBjb21wbHkgd2l0aCB0YXggcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBBZ3JlZW1lbnQvTGVhc2U6PC9zdHJvbmc+IEEgY29weSBvZiB0aGUgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgdGVybXMsIHJlbnRhbCBwZXJpb2QsIGFuZCBwYXltZW50IGRldGFpbHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBJbmNvbWUgUmVjb3Jkczo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBhbGwgcmVudGFsIGluY29tZSByZWNlaXZlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIFJlY29yZHM6PC9zdHJvbmc+IFJlY2VpcHRzIGFuZCByZWNvcmRzIG9mIGV4cGVuc2VzIHJlbGF0ZWQgdG8gdGhlIHJlbnRhbCBhY3Rpdml0eS4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCByZXBhaXJzLCBtYWludGVuYW5jZSwgdXRpbGl0aWVzLCBpbnN1cmFuY2UsIGFuZCBwcm9wZXJ0eSBtYW5hZ2VtZW50IGZlZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIFVzZSBEZXRhaWxzOjwvc3Ryb25nPiBBIGxvZyBvciBjYWxlbmRhciBkb2N1bWVudGluZyB0aGUgc3BlY2lmaWMgZGF5cyB0aGUgcHJvcGVydHkgd2FzIHVzZWQgZm9yIHBlcnNvbmFsIHB1cnBvc2VzIGFuZCBub3QgcmVudGVkIG91dC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJvcGVydHkgVGF4IGFuZCBNb3J0Z2FnZSBJbnRlcmVzdCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgcHJvcGVydHkgdGF4IHN0YXRlbWVudHMgYW5kIG1vcnRnYWdlIGludGVyZXN0IHN0YXRlbWVudHMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkltcHJvdmVtZW50cyBhbmQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBSZWNvcmRzIG9mIGFueSBwcm9wZXJ0eSBpbXByb3ZlbWVudHMgb3IgZGVwcmVjaWF0aW9uIHNjaGVkdWxlcyBpZiBwcmV2aW91c2x5IGNsYWltZWQgb24geW91ciB0YXggcmV0dXJucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+SXQgaXMgY3J1Y2lhbCB0aGF0IHdlIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgZG9jdW1lbnRzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIFBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgZGlyZWN0bHkgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBjb25jZXJucy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJSb3lhbHR5IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJveWFsdHkgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB5b3UndmUgaW5kaWNhdGVkIHJlY2VpdmluZyBwYXltZW50cyB0aGF0IGNvdWxkIGJlIGNvbnNpZGVyZWQgcm95YWx0eSBpbmNvbWUgdGhpcyBwYXN0IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgZWZmaWNpZW50IHRheCBwcmVwYXJhdGlvbiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWxsIEZvcm1zIDEwOTktTUlTQzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgY29waWVzIG9mIGFueSAxMDk5LU1JU0MgZm9ybXMgcmVjZWl2ZWQgZm9yIHJveWFsdHkgcGF5bWVudHMuIEluY2x1ZGUgdGhvc2UgZnJvbSB0cmFkaXRpb25hbCBzb3VyY2VzIGxpa2UgcGF0ZW50cywgY29weXJpZ2h0cywgYW5kIG1pbmVyYWwgcmlnaHRzLCBhcyB3ZWxsIGFzIGFueSBmcm9tIGRpZ2l0YWwgY29udGVudCBwbGF0Zm9ybXMgc3VjaCBhcyBVZGVteSwgWW91VHViZSwgZXRjLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIFN0YXRlbWVudCBvZiBFYXJuaW5nczo8L3N0cm9uZz4gSWYgeW91IHJlY2VpdmUgcm95YWx0eSBpbmNvbWUgZnJvbSBzb3VyY2VzIHRoYXQgZG8gbm90IHByb3ZpZGUgYSAxMDk5LU1JU0MsIG9yIGluIGFkZGl0aW9uIHRvIHRob3NlIHRoYXQgZG8sIHdlIG5lZWQgYSBkZXRhaWxlZCBzdGF0ZW1lbnQgb3IgbG9nIG9mIHRoZXNlIGVhcm5pbmdzLiBUaGlzIHNob3VsZCBpbmNsdWRlIGRhdGVzLCBhbW91bnRzLCBhbmQgc291cmNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FeHBlbnNlIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEFueSBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdlbmVyYXRpb24gb2YgdGhpcyByb3lhbHR5IGluY29tZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBtYXJrZXRpbmcsIHByb2R1Y3Rpb24sIGFuZCBsZWdhbCBleHBlbnNlcy4gUGxlYXNlIHByb3ZpZGUgcmVjZWlwdHMsIGludm9pY2VzLCBvciBhIGRldGFpbGVkIGV4cGVuc2UgbG9nLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRpZ2l0YWwgQ29udGVudCBQbGF0Zm9ybSBSZXBvcnRzOjwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIGFueSB5ZWFyLWVuZCBzdW1tYXJ5IHJlcG9ydHMgb3IgaW5jb21lIHN0YXRlbWVudHMgcHJvdmlkZWQgYnkgZGlnaXRhbCBwbGF0Zm9ybXMgd2hlcmUgeW91ciBjb250ZW50IGlzIGhvc3RlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgV2l0aGhvbGRpbmcgTm90aWNlczo8L3N0cm9uZz4gSWYgdGF4IHdhcyB3aXRoaGVsZCBmcm9tIGFueSBvZiB5b3VyIHJveWFsdHkgcGF5bWVudHMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igbm90aWNlcyBpbmRpY2F0aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZG9jdW1lbnRzIGFuZCBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2lsbCBoZWxwIHVzIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHByZXBhcmF0aW9uIGlzIGJvdGggYWNjdXJhdGUgYW5kIG1heGltaXplZCBmb3IgeW91ciBiZW5lZml0LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgaXRlbXMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIb3RlbCBNb3RlbCBCZWQgQnJlYWtmYXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSG90ZWwgTW90ZWwgQmVkIEJyZWFrZmFzdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBhY2N1cmF0ZWx5IGNvbXBsZXRlIHlvdXIgdGF4IHByZXBhcmF0aW9uLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBvd25pbmcgcmVudGFsIHByb3BlcnRpZXMgdGhhdCBvcGVyYXRlIGFzIGEgSG90ZWwsIE1vdGVsLCBCZWQgYW5kIEJyZWFrZmFzdCwgb3Igb2ZmZXIgc2hvcnQtdGVybSBhY2NvbW1vZGF0aW9ucyBzaW1pbGFyIHRvIEFpcmJuYi4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHNlcnZpY2UgYW5kIGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9wZXJ0eSBEZXRhaWxzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzcyBhbmQgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIHByb3BlcnR5IHlvdSByZW50IG91dCBvbiBhIHNob3J0LXRlcm0gYmFzaXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIFJlY29yZHM6PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgYWxsIGluY29tZSByZWNlaXZlZCBmcm9tIHRoZXNlIHByb3BlcnRpZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcmVudGFsIGluY29tZSwgY2xlYW5pbmcgZmVlcywgYW5kIGFueSBvdGhlciBjaGFyZ2VzIHRvIHJlbnRlcnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBDb21wcmVoZW5zaXZlIGxpc3Qgb2YgYWxsIGV4cGVuc2VzIHJlbGF0ZWQgdG8gZWFjaCByZW50YWwgYWN0aXZpdHkuIFRoaXMgaW5jbHVkZXMgbW9ydGdhZ2UgaW50ZXJlc3QsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIHJlcGFpcnMgYW5kIG1haW50ZW5hbmNlLCB1dGlsaXRpZXMsIG1hbmFnZW1lbnQgZmVlcywgYW5kIGFkdmVydGlzaW5nIGNvc3RzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk9jY3VwYW5jeSBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gTnVtYmVyIG9mIGRheXMgZWFjaCBwcm9wZXJ0eSB3YXMgcmVudGVkIG91dCBkdXJpbmcgdGhlIHllYXIsIGFzIHdlbGwgYXMgdGhlIG51bWJlciBvZiBkYXlzIGl0IHdhcyB1c2VkIGZvciBwZXJzb25hbCBwdXJwb3NlcywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5MZWdhbCBEb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgYW55IGxvY2FsIGxpY2Vuc2VzLCBwZXJtaXRzLCBvciByZWdpc3RyYXRpb25zIHJlcXVpcmVkIGZvciBvcGVyYXRpbmcgdGhlc2UgcmVudGFsIHByb3BlcnRpZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSwgYW5kIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gbWF5IGJlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBQbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGFuZCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFuZCBlc3NlbnRpYWwgZm9yIHRoZSBhY2N1cmF0ZSBhbmQgdGltZWx5IGNvbXBsZXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciBjaG9vc2luZyBvdXIgc2VydmljZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUmVjb3ZlcnlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFJlY292ZXJ5XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHJlY2VpdmluZyBwYXltZW50cyBvciByZWZ1bmRzIGNvbnNpZGVyZWQgYSAnVGF4YWJsZSBSZWNvdmVyeScgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jb3Jwb3JhdGUgdGhpcyBpbnRvIHlvdXIgdGF4IGZpbGluZ3MsIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGRldGFpbHMuIENvdWxkIHlvdSBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgPGxpPjxiPkFtb3VudCBvZiBUYXhhYmxlIFJlY292ZXJ5OjwvYj4gVGhlIHRvdGFsIHN1bSBvZiBhbGwgcGF5bWVudHMgb3IgcmVmdW5kcyByZWNlaXZlZCB0aGF0IGFyZSBjbGFzc2lmaWVkIGFzIHRheGFibGUgcmVjb3ZlcnkuPC9saT5cbiAgPGxpPjxiPlNvdXJjZSBEb2N1bWVudGF0aW9uOjwvYj4gUGxlYXNlIHByb3ZpZGUgYW55IG9mZmljaWFsIHN0YXRlbWVudHMgb3IgZG9jdW1lbnRzIGNvbmZpcm1pbmcgdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcy4gVGhpcyBjb3VsZCBpbmNsdWRlIGJhbmsgc3RhdGVtZW50cywgcmVmdW5kIG9yIGNvbXBlbnNhdGlvbiBsZXR0ZXJzLCBvciBhbnkgb3RoZXIgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbi48L2xpPlxuICA8bGk+PGI+TmF0dXJlIG9mIHRoZSBPcmlnaW5hbCBEZWR1Y3Rpb24gb3IgQ3JlZGl0OjwvYj4gQSBicmllZiBleHBsYW5hdGlvbiBvciBkb2N1bWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBleHBlbnNlIG9yIGludmVzdG1lbnQgdGhhdCBsZWQgdG8gdGhlIHRheGFibGUgcmVjb3ZlcnkuIFRoaXMgaW5jbHVkZXMgdGhlIHRheCB5ZWFyIG9mIHRoZSBkZWR1Y3Rpb24gb3IgY3JlZGl0LjwvbGk+XG4gIDxsaT48Yj5EYXRlIFJlY2VpdmVkOjwvYj4gVGhlIHNwZWNpZmljIGRhdGVzIHdoZW4gdGhlc2UgcGF5bWVudHMgb3IgcmVmdW5kcyB3ZXJlIHJlY2VpdmVkLjwvbGk+XG4gIDxsaT48Yj5BbnkgUmVsYXRlZCBFeHBlbnNlIERvY3VtZW50YXRpb246PC9iPiBJZiB0aGVyZSB3ZXJlIGFueSBleHBlbnNlcyBpbmN1cnJlZCB0byByZWNlaXZlIHRoaXMgcmVjb3ZlcnkgKHN1Y2ggYXMgbGVnYWwgZmVlcyksIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIGRvY3VtZW50YXRpb24uPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciB1cyB0byBlbnN1cmUgeW91ciB0YXggcmV0dXJuIGlzIGFjY3VyYXRlIGFuZCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuIElmIHlvdSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0YXhhYmxlIHJlY292ZXJpZXMsIHBsZWFzZSBwcm92aWRlIHRoZSBhYm92ZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSBpbnN0YW5jZS48L3A+XG48cD5QbGVhc2UgbGV0IHVzIGtub3cgaWYgeW91IG5lZWQgYW55IGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24uIFdlIGFyZSBoZXJlIHRvIGhlbHAgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgQWxpbW9ueVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQWxpbW9ueVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYCAgICA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBwcmVsaW1pbmFyeSBpbmZvcm1hdGlvbiBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFdlIHVuZGVyc3RhbmQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBhbGltb255IHBheW1lbnRzIGluIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgaW5jbHVkZSB0aGlzIGluIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRzIGJhc2VkIG9uIHRoZSBkYXRlIG9mIHlvdXIgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC48L3A+XG4gICAgPHA+QWxpbW9ueSBwYXltZW50cyBhcmUgY29uc2lkZXJlZCB0YXhhYmxlIGluY29tZSBmb3IgdGhlIHJlY2VpdmVyIGRlcGVuZGluZyBvbiB0aGUgZGF0ZSBvZiB0aGUgZGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudC4gRGl2b3JjZSBvciBzZXBhcmF0aW9uIGFncmVlbWVudHMgZXhlY3V0ZWQgYWZ0ZXIgRGVjZW1iZXIgMzEsIDIwMTgsIGRvIG5vdCBjb3VudCBhbGltb255IHBheW1lbnRzIGFzIHRheGFibGUgaW5jb21lLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgdG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgYWNjb3VudCBmb3IgdGhlc2UgcGF5bWVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiB5b3VyIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQ6PC9zdHJvbmc+IFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBhbGltb255IHBheW1lbnRzIHlvdSByZWNlaXZlZCBhcmUgdGF4YWJsZS4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFtb3VudCBvZiBhbGltb255IHJlY2VpdmVkIHRoaXMgdGF4IHllYXI6PC9zdHJvbmc+IFRvdGFsIGFubnVhbCBhbW91bnQgcmVjZWl2ZWQgaW4gYWxpbW9ueSBwYXltZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGNvbmZpcm1pbmcgYWxpbW9ueSBwYXltZW50czo8L3N0cm9uZz4gQmFuayBzdGF0ZW1lbnRzLCB0cmFuc2ZlciByZWNlaXB0cywgb3IgYW55IGxlZ2FsIGRvY3VtZW50cyBzaG93aW5nIHRoZSBhbW91bnQgb2YgYWxpbW9ueSByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5QYXllcuKAmXMgaW5mb3JtYXRpb246PC9zdHJvbmc+IEZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKSBvZiB0aGUgcGVyc29uIGZyb20gd2hvbSB5b3UgaGF2ZSByZWNlaXZlZCB0aGUgYWxpbW9ueSBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+WW91ciBjb29wZXJhdGlvbiBpbiBwcm92aWRpbmcgdGhlc2UgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIGlzIGNydWNpYWwgZm9yIHRoZSB0aW1lbHkgYW5kIGFjY3VyYXRlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGxldCB1cyBrbm93IGlmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgcmVxdWVzdC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiR292ZXJubWVudCBCZW5lZml0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkdvdmVybm1lbnQgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVwb3J0ZWQgcmVjZWl2aW5nIGdvdmVybm1lbnQgYmVuZWZpdHMgdGhhdCBtYXkgYmUgdGF4YWJsZSBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGZpbGluZywgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+PHN0cm9uZz5Gb3JtIDEwOTktRzo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gMTA5OS1HIGZvciBlYWNoIGluc3RhbmNlIG9mIGdvdmVybm1lbnQgYmVuZWZpdHMgcmVjZWl2ZWQuIFRoaXMgZm9ybSBpcyB0eXBpY2FsbHkgaXNzdWVkIGZvciB1bmVtcGxveW1lbnQgY29tcGVuc2F0aW9uLCBzdGF0ZSBvciBsb2NhbCBpbmNvbWUgdGF4IHJlZnVuZHMsIGNyZWRpdHMgb3Igb2Zmc2V0cywgYW5kIG90aGVyIGdvdmVybm1lbnQgcGF5bWVudHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIGxpc3Qgb2YgYmVuZWZpdHMgcmVjZWl2ZWQ6PC9zdHJvbmc+IElmIHlvdSByZWNlaXZlZCBnb3Zlcm5tZW50IGJlbmVmaXRzIG5vdCByZXBvcnRlZCBvbiBGb3JtIDEwOTktRyAoc3VjaCBhcyBjZXJ0YWluIHdlbGZhcmUgYmVuZWZpdHMpLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3QgaW5jbHVkaW5nIHRoZSB0eXBlIG9mIGJlbmVmaXQsIGFtb3VudCByZWNlaXZlZCwgYW5kIHRoZSBhZ2VuY3kgdGhhdCBwcm92aWRlZCB0aGUgYmVuZWZpdC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IEJlbmVmaXRzOjwvc3Ryb25nPiBJZiB5b3UgcmVjZWl2ZWQgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzLCBpbmNsdWRlIHlvdXIgU1NBLTEwOTkgb3IgUlJCLTEwOTkgZm9ybSB3aGljaCByZXBvcnRzIHRoZXNlIGVhcm5pbmdzLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIGZvciBhbnkgd2l0aGhlbGQgdGF4ZXM6PC9zdHJvbmc+IElmIHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSBhbnkgYmVuZWZpdHMgcmVjZWl2ZWQsIGluY2x1ZGUgdGhlIGFwcGxpY2FibGUgZG9jdW1lbnRhdGlvbiBzaG93aW5nIHRoZSBhbW91bnQgd2l0aGhlbGQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gZW5zdXJlIHlvdXIgdGF4IGZpbGluZ3MgYXJlIHByb2Nlc3NlZCB0aW1lbHkgYW5kIGNvcnJlY3RseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UsIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU29jaWFsIFNlY3VyaXR5IEluY29tZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNvY2lhbCBTZWN1cml0eSBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYXMgd2UgcHJvY2VlZCB3aXRoIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4uIEFzIHlvdSd2ZSBpbmRpY2F0ZWQgcmVjZWlwdCBvZiBTb2NpYWwgU2VjdXJpdHkgYmVuZWZpdHMgdGhpcyB0YXggeWVhciwgd2UgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cy9pbmZvcm1hdGlvbiB0byBlbnN1cmUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIHRheCBmaWxpbmc6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5Tb2NpYWwgU2VjdXJpdHkgQmVuZWZpdCBTdGF0ZW1lbnQgKEZvcm0gU1NBLTEwOTkpPC9zdHJvbmc+IC0gVGhpcyBmb3JtIGRldGFpbHMgdGhlIHRvdGFsIGFtb3VudCBvZiBzb2NpYWwgc2VjdXJpdHkgYmVuZWZpdHMgcmVjZWl2ZWQuIElmIHlvdSBoYXZlIG1pc3BsYWNlZCB0aGlzIGZvcm0sIGl0IGNhbiBiZSBvYnRhaW5lZCBvbmxpbmUgdGhyb3VnaCB5b3VyIFNvY2lhbCBTZWN1cml0eSBhY2NvdW50LjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+Tm90aWNlIG9mIEFkanVzdGVkIEFtb3VudDwvc3Ryb25nPiAoaWYgYXBwbGljYWJsZSkgLSBJZiB0aGVyZSBoYXZlIGJlZW4gYW55IGFkanVzdG1lbnRzIG9yIGNvcnJlY3Rpb25zIHRvIHlvdXIgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzIGR1cmluZyB0aGUgeWVhciwgcGxlYXNlIHByb3ZpZGUgYW55IG5vdGljZXMgb3IgZG9jdW1lbnRhdGlvbiByZWZsZWN0aW5nIHRoZXNlIGNoYW5nZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5TdXBwbGVtZW50YWwgU2VjdXJpdHkgSW5jb21lIChTU0kpPC9zdHJvbmc+IChpZiBhcHBsaWNhYmxlKSAtIEFsdGhvdWdoIFNTSSBpcyB0eXBpY2FsbHkgbm90IHRheGFibGUsIGRvY3VtZW50YXRpb24gb2YgdGhlc2UgcGF5bWVudHMgaXMgc3RpbGwgcmVxdWlyZWQgZm9yIGNvbXByZWhlbnNpdmUgZmluYW5jaWFsIGFzc2Vzc21lbnQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBkZXRlcm1pbmluZyB0aGUgdGF4YWJsZSBwb3J0aW9uIG9mIHlvdXIgU29jaWFsIFNlY3VyaXR5IGJlbmVmaXRzLCBpZiBhbnksIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zLiBGYWlsdXJlIHRvIHByb3ZpZGUgYWNjdXJhdGUgYW5kIGNvbXBsZXRlIGluZm9ybWF0aW9uIG1heSByZXN1bHQgaW4gZGVsYXlzIG9yIGluYWNjdXJhY2llcyBpbiB5b3VyIHRheCBmaWxpbmcuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoZXNlIG1hdHRlcnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkdhbWJsaW5nIFdpbm5pbmdzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiR2FtYmxpbmcgV2lubmluZ3NcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciBwcmV2aW91cyBhbnN3ZXJzIHRoYXQgeW91IGhhdmUgZXhwZXJpZW5jZWQgZ2FtYmxpbmcgd2lubmluZ3MgdGhpcyB0YXggeWVhciBmcm9tIGxvdHRlcmllcywgY2FzaW5vcywgYmV0dGluZywgb3Igb3RoZXIgZm9ybXMgb2YgZ2FtYmxpbmcuIFRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCBmaWxpbmdzLCBpdCdzIGVzc2VudGlhbCB0aGF0IHdlIGNvbGxlY3Qgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHdpbm5pbmdzLjwvcD5cbjxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG48b2w+XG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gZm9yIEVhY2ggV2lubmluZzo8L3N0cm9uZz4gVGhpcyBjYW4gaW5jbHVkZSBXLTJHIGZvcm1zLCBzdGF0ZW1lbnRzIGZyb20gY2FzaW5vcywgcmFjZXRyYWNrcywgb3Igb3RoZXIgZ2FtYmxpbmcgZXN0YWJsaXNobWVudHMsIGFuZCBhbnkgb3RoZXIgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiB0aGF0IHJlcG9ydHMgeW91ciB3aW5uaW5ncy48L2xpPlxuICA8bGk+PHN0cm9uZz5EYXRlcyBvZiBXaW5uaW5nczo8L3N0cm9uZz4gVGhlIHNwZWNpZmljIGRhdGVzIG9uIHdoaWNoIHlvdSBoYWQgZ2FtYmxpbmcgd2lubmluZ3MuPC9saT5cbiAgPGxpPjxzdHJvbmc+VHlwZXMgb2YgR2FtYmxpbmcgQWN0aXZpdGllczo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgd2hldGhlciB5b3VyIHdpbm5pbmdzIHdlcmUgZnJvbSBsb3R0ZXJpZXMsIGNhc2lub3MsIGJldHRpbmcsIHNwb3J0cyBiZXR0aW5nLCBnYW1lcyBvZiBjaGFuY2UsIG9yIGFueSBvdGhlciBmb3JtcyBvZiBnYW1ibGluZy48L2xpPlxuICA8bGk+PHN0cm9uZz5BbW91bnQgb2YgV2lubmluZ3M6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgd29uIGZyb20gZWFjaCBnYW1ibGluZyBhY3Rpdml0eS4gUGxlYXNlIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBjYXNoIHdpbm5pbmdzIGFuZCB0aGUgZmFpciBtYXJrZXQgdmFsdWUgb2YgYW55IG5vbi1jYXNoIHByaXplcy48L2xpPlxuICA8bGk+PHN0cm9uZz5FeHBlbnNlcyBSZWxhdGVkIHRvIEdhbWJsaW5nIEFjdGl2aXRpZXM6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIGxpc3QgYW55IGV4cGVuc2VzIHJlbGF0ZWQgdG8geW91ciBnYW1ibGluZyBhY3Rpdml0aWVzLCBzdWNoIGFzIGJ1eS1pbnMgb3IgdHJhdmVsIGV4cGVuc2VzLiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZXNlIGV4cGVuc2VzIG1heSB2YXJ5LjwvbGk+XG4gIDxsaT48c3Ryb25nPkxvc3Nlczo8L3N0cm9uZz4gSWYgeW91IGhhdmUgcmVjb3JkcyBvZiB5b3VyIGxvc3NlcywgcGxlYXNlIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvZiB0aGVzZSBsb3NzZXMgYXMgdGhleSBjYW4gcG90ZW50aWFsbHkgb2Zmc2V0IHlvdXIgd2lubmluZ3MgZm9yIHRheCBwdXJwb3Nlcy4gTm90ZSwgbG9zc2VzIGNhbiBvbmx5IGJlIGNsYWltZWQgdXAgdG8gdGhlIGFtb3VudCBvZiB0b3RhbCB3aW5uaW5ncy48L2xpPlxuPC9vbD5cbjxwPkl0J3MgaW1wb3J0YW50IHRvIGdhdGhlciB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZ2FtYmxpbmcgd2lubmluZ3MgYW5kIGFueSByZWxhdGVkIGRlZHVjdGlvbnMgb3IgbG9zc2VzIG9uIHlvdXIgdGF4IHJldHVybi4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiBpcyBhcyBkZXRhaWxlZCBhbmQgYWNjdXJhdGUgYXMgcG9zc2libGUgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB5b3VyIHRheCBmaWxpbmcuPC9wPlxuPHA+U2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIG9yIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LiBXZSdyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDYW5jZWxsYXRpb24gb2YgRGVidCBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5PdXIgcmVjb3JkcyBpbmRpY2F0ZSB5b3UndmUgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gaGF2aW5nIGRlYnRzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBmb3IgbGVzcyB0aGFuIHRoZSBhbW91bnQgeW91IG93ZWQgZHVyaW5nIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoaXMgaW5mb3JtYXRpb24gb24geW91ciB0YXggcmV0dXJuIGFuZCBleHBsb3JlIGFueSBhcHBsaWNhYmxlIHRheCByZWxpZWYgb3IgZXhjbHVzaW9ucywgd2UgbmVlZCBhZGRpdGlvbmFsIGRldGFpbHMgZnJvbSB5b3UuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG48b2w+XG48bGk+PHN0cm9uZz5Gb3JtIDEwOTktQzwvc3Ryb25nPjogQ29waWVzIG9mIGFueSBGb3JtIDEwOTktQyB5b3UgcmVjZWl2ZWQgcmVsYXRlZCB0byB0aGUgY2FuY2VsbGF0aW9uIG9mIGRlYnQuPC9saT5cbjxsaT48c3Ryb25nPkRldGFpbGVkIExpc3Qgb2YgRGVidHM8L3N0cm9uZz46IElmIHlvdSBkaWRuJ3QgcmVjZWl2ZSBhIEZvcm0gMTA5OS1DLCBwbGVhc2UgcHJvdmlkZSBhIGRldGFpbGVkIGxpc3Qgb2YgYW55IGRlYnRzIHRoYXQgd2VyZSBjYW5jZWxlZCwgaW5jbHVkaW5nOlxuICAgIDx1bD5cbiAgICA8bGk+VGhlIG5hbWUgb2YgdGhlIGNyZWRpdG9yPC9saT5cbiAgICA8bGk+VGhlIG9yaWdpbmFsIGFtb3VudCBvZiB0aGUgZGVidDwvbGk+XG4gICAgPGxpPlRoZSBhbW91bnQgY2FuY2VsZWQ8L2xpPlxuICAgIDxsaT5UaGUgZGF0ZSBvZiBjYW5jZWxsYXRpb248L2xpPlxuICAgIDwvdWw+XG48L2xpPlxuPGxpPjxzdHJvbmc+RXhwbGFuYXRpb24gb2YgQ2lyY3Vtc3RhbmNlczwvc3Ryb25nPjogQSBicmllZiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBkZWJ0IGNhbmNlbGxhdGlvbiAoZS5nLiwgZmluYW5jaWFsIGhhcmRzaGlwLCByZXR1cm4gb2YgcHVyY2hhc2VkIGdvb2RzLCBldGMuKS48L2xpPlxuPGxpPjxzdHJvbmc+SW5zb2x2ZW5jeSBEb2N1bWVudGF0aW9uPC9zdHJvbmc+OiBJZiB5b3Ugd2VyZSBpbnNvbHZlbnQgKHdoZXJlIHlvdXIgdG90YWwgZGVidHMgZXhjZWVkZWQgeW91ciB0b3RhbCBhc3NldHMpIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2FuY2VsbGF0aW9uLCBwbGVhc2UgcHJvdmlkZSBkb2N1bWVudGF0aW9uIHN1cHBvcnRpbmcgeW91ciBmaW5hbmNpYWwgc3RhdHVzIGF0IHRoYXQgdGltZS48L2xpPlxuPC9vbD5cbjxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHlvdXIgZmluYW5jaWFsIGluZm9ybWF0aW9uIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBhbnkgcG90ZW50aWFsIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIHRoZSBjYW5jZWxsYXRpb24gb2YgZGVidC4gUGxlYXNlIHVwbG9hZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyB0aHJvdWdoIG91ciBzZWN1cmUgY2xpZW50IHBvcnRhbC48L3A+XG48cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpbWFyeSBSZXNpZGVuY2UgRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcmltYXJ5IFJlc2lkZW5jZSBEZWJ0IENhbmNlbGxhdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RlZCB0aGF0IHlvdSd2ZSBpbmRpY2F0ZWQgYSBwb3J0aW9uIG9mIHlvdXIgbW9ydGdhZ2UgZm9yIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugd2FzIGZvcmdpdmVuLCBjYW5jZWxlZCwgb3IgZGlzY2hhcmdlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhpcyBpbiB5b3VyIHRheCBkb2N1bWVudHMgYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+Rm9ybSAxMDk5LUMsIENhbmNlbGxhdGlvbiBvZiBEZWJ0OjwvYj4gVGhpcyBpcyBhIGNydWNpYWwgZG9jdW1lbnQgdGhhdCBsZW5kZXJzIG11c3Qgc2VuZCB5b3UgaWYgdGhleSBjYW5jZWxlZCBvciBmb3JnYXZlIGEgZGVidCBleGNlZWRpbmcgJDYwMC48L2xpPlxuICAgICAgICA8bGk+PGI+V3JpdHRlbiBjb21tdW5pY2F0aW9uIGZyb20geW91ciBsZW5kZXI6PC9iPiBBbnkgbGV0dGVycyBvciBvZmZpY2lhbCBkb2N1bWVudHMgZnJvbSB5b3VyIGxlbmRlciByZWdhcmRpbmcgdGhlIGNhbmNlbGxhdGlvbiwgZm9yZ2l2ZW5lc3MsIG9yIGRpc2NoYXJnZSBvZiB5b3VyIG1vcnRnYWdlIGRlYnQuPC9saT5cbiAgICAgICAgPGxpPjxiPk1vcnRnYWdlIHN0YXRlbWVudHM6PC9iPiBQbGVhc2UgcHJvdmlkZSBtb3J0Z2FnZSBzdGF0ZW1lbnRzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlYnQgY2FuY2VsbGF0aW9uIHRvIHNob3cgdGhlIGNoYW5nZSBpbiB5b3VyIG1vcnRnYWdlIGJhbGFuY2UuPC9saT5cbiAgICAgICAgPGxpPjxiPkRvY3VtZW50YXRpb24gcmVsYXRlZCB0byB0aGUgcHJvcGVydHk6PC9iPiBUaGlzIGluY2x1ZGVzOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5Zb3VyIG1vcnRnYWdlIGNvbnRyYWN0LjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFueSBkb2N1bWVudHMgcmVsYXRlZCB0byBmb3JlY2xvc3VyZSwgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIG9mIGEgc2hvcnQgc2FsZSwgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPjxiPlJlY29yZCBvZiBwYXltZW50cyBtYWRlOjwvYj4gSWYgeW91IG1hZGUgYW55IHBheW1lbnRzIHRvd2FyZHMgdGhlIG1vcnRnYWdlIGR1cmluZyB0aGUgdGF4IHllYXIsIHBsZWFzZSBwcm92aWRlIGRldGFpbGVkIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGVzZSBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgcHJvdmlkZSB0aGVtIHRvIHVzLiBJZiB5b3UgaGF2ZSBhbnkgZGlmZmljdWx0eSBvYnRhaW5pbmcgYW55IG9mIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gUHJvdmlkaW5nIHRoaXMgaW5mb3JtYXRpb24gaW4gYSB0aW1lbHkgbWFubmVyIGlzIGNydWNpYWwgZm9yIHRoZSBhY2N1cmF0ZSBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gRGVidCBDYW5jZWxsYXRpb25cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5JbiByZXNwb25zZSB0byB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2Ygc3R1ZGVudCBsb2FuIGRlYnQgZHVyaW5nIHRoaXMgdGF4IHllYXIsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IHByb2Nlc3MgeW91ciB0YXggcmV0dXJuLiBUaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIHBvdGVudGlhbGx5IG1heGltaXppbmcgeW91ciBiZW5lZml0cy4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuPG9sPlxuICA8bGk+PHN0cm9uZz5PZmZpY2lhbCBDYW5jZWxsYXRpb24gb3IgRm9yZ2l2ZW5lc3MgTm90aWNlOjwvc3Ryb25nPiBBIGNvcHkgb2YgdGhlIG9mZmljaWFsIGxldHRlciBvciBub3RpY2UgZnJvbSB0aGUgbGVuZGVyIG9yIHByb2dyYW0gYWRtaW5pc3RyYXRvciBjb25maXJtaW5nIHRoZSBjYW5jZWxsYXRpb24sIGZvcmdpdmVuZXNzLCBvciBkaXNjaGFyZ2Ugb2YgeW91ciBzdHVkZW50IGxvYW4gZGVidC48L2xpPlxuICA8bGk+PHN0cm9uZz5TdHVkZW50IExvYW4gQWNjb3VudCBTdGF0ZW1lbnQ6PC9zdHJvbmc+IEEgc3RhdGVtZW50IGZyb20gYmVmb3JlIGFuZCBhZnRlciB0aGUgbG9hbiBmb3JnaXZlbmVzcywgY2FuY2VsbGF0aW9uLCBvciBkaXNjaGFyZ2Ugb2NjdXJyZWQsIHNob3dpbmcgdGhlIG91dHN0YW5kaW5nIGJhbGFuY2UgYW5kIHRoZSBiYWxhbmNlIGFmdGVyIHRoZSBhY3Rpb24gd2FzIHRha2VuLjwvbGk+XG4gIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb24gb2YgUXVhbGlmeWluZyBQcm9ncmFtIFBhcnRpY2lwYXRpb246PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBvciBjZXJ0aWZpY2F0ZXMgb2YgeW91ciBwYXJ0aWNpcGF0aW9uIGluIHF1YWxpZnlpbmcgcHJvZ3JhbXMgc3VjaCBhcyBQdWJsaWMgU2VydmljZSBMb2FuIEZvcmdpdmVuZXNzIChQU0xGKSBvciBUZWFjaGVyIExvYW4gRm9yZ2l2ZW5lc3MsIGFtb25nIG90aGVycy48L2xpPlxuICA8bGk+PHN0cm9uZz5JUlMgRm9ybSAxMDk5LUMgKGlmIHJlY2VpdmVkKTo8L3N0cm9uZz4gVGhpcyBmb3JtIGlzIGlzc3VlZCBieSBzb21lIGxlbmRlcnMgd2hlbiBhIGRlYnQgaXMgZm9yZ2l2ZW4gb3IgY2FuY2VsZWQgYW5kIGlzIGNydWNpYWwgZm9yIHRheCByZXBvcnRpbmcgcHVycG9zZXMuIEl0IGluY2x1ZGVzIHRoZSBhbW91bnQgb2YgZm9yZ2l2ZW4gZGVidCB0aGF0IG1heSBiZSBjb25zaWRlcmVkIHRheGFibGUgaW5jb21lLjwvbGk+XG4gIDxsaT48c3Ryb25nPkRldGFpbGVkIERlc2NyaXB0aW9uIG9mIENpcmN1bXN0YW5jZXM6PC9zdHJvbmc+IEEgd3JpdHRlbiBleHBsYW5hdGlvbiBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBsZWFkaW5nIHRvIHRoZSBsb2FuJ3MgY2FuY2VsbGF0aW9uLCBmb3JnaXZlbmVzcywgb3IgZGlzY2hhcmdlLCBpbmNsdWRpbmcgYW55IGRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB5b3VyIGVsaWdpYmlsaXR5IHVuZGVyIHRoZSBzcGVjaWZpYyBwcm9ncmFtIG9yIGNvbmRpdGlvbi48L2xpPlxuPC9vbD5cbjxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIHByb3ZpZGVkIGFyZSBjb21wbGV0ZSBhbmQgbGVnaWJsZS4gWW91IGNhbiB1cGxvYWQgdGhlIGRvY3VtZW50cyBzZWN1cmVseSB0aHJvdWdoIG91ciBjbGllbnQgcG9ydGFsLjwvcD5cbjxwPllvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBlbmFibGUgdXMgdG8gYWNjdXJhdGVseSBhbmQgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbjxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIb2JieSBJbmNvbWVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJIb2JieSBJbmNvbWVcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIHByb3ZpZGluZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgeW91ciBpbmNvbWUgc291cmNlcyBmb3IgdGhpcyB0YXggeWVhci4gQXMgcGFydCBvZiBvdXIgcHJlcGFyYXRpb24gZm9yIHlvdXIgdGF4IHJldHVybiwgd2UndmUgbm90ZWQgdGhhdCB5b3UndmUgZWFybmVkIG1vbmV5IGZyb20gaG9iYmllcy4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyB0byB0aGUgSVJTIGFuZCBlbnN1cmUgeW91IGNvbXBseSB3aXRoIHRheCByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50YXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U3VtbWFyeSBvZiBIb2JieSBJbmNvbWU6PC9zdHJvbmc+IEEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgaW5jb21lIHJlY2VpdmVkIGZyb20geW91ciBob2JieSBhY3Rpdml0aWVzLiBQbGVhc2UgaW5jbHVkZSBkYXRlcywgYW1vdW50cywgYW5kIHNvdXJjZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RXhwZW5zZSBSZWNvcmRzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIG9mIGFueSBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgaG9iYnkgYWN0aXZpdGllcy4gVGhpcyBjYW4gaW5jbHVkZSBtYXRlcmlhbHMsIGVxdWlwbWVudCwgYW5kIGFueSBvdGhlciBjb3N0cyBpbmN1cnJlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIFN0YXRlbWVudHM6PC9zdHJvbmc+IENvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgdGhhdCBzaG93IHRoZSB0cmFuc2FjdGlvbnMgcmVsYXRlZCB0byB5b3VyIGhvYmJ5IGluY29tZSBhbmQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUHJpemVzOjwvc3Ryb25nPiBJZiB5b3VyIGhvYmJ5IGluY29tZSBpbmNsdWRlcyBwcml6ZXMsIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3IgcmVjZWlwdHMgdGhhdCBkZXRhaWwgdGhlc2UgYXdhcmRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIFJlbGV2YW50IERvY3VtZW50czo8L3N0cm9uZz4gQW55IG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBjYW4gc3VwcG9ydCB0aGUgaW5jb21lIGFuZCBleHBlbnNlcyByZXBvcnRlZCBmb3IgeW91ciBob2JieSBhY3Rpdml0aWVzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHlvdSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGF2b2lkIGRlbGF5cyBpbiB0aGUgdGF4IHJldHVybiBwcm9jZXNzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGlzIHJlcXVpcmVkLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2VydGFpbiBDb3VydCBBd2FyZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDZXJ0YWluIENvdXJ0IEF3YXJkc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIGNvdXJ0IGF3YXJkcyBvciBzZXR0bGVtZW50cyBpbiB0aGUgcGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIGFtb3VudHMgYW5kIGNvbXBseSB3aXRoIHRheCBvYmxpZ2F0aW9ucywgd2UgbmVlZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIGF3YXJkcyBvciBzZXR0bGVtZW50cy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlR5cGUgb2YgQXdhcmQgb3IgU2V0dGxlbWVudDo8L3N0cm9uZz4gU3BlY2lmeSB0aGUgbmF0dXJlIChlLmcuLCBsb3N0IHdhZ2VzLCBwdW5pdGl2ZSBkYW1hZ2VzLCBldGMuKS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQgUmVjZWl2ZWQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgYXdhcmRlZCBvciBzZXR0bGVkLCBiZWZvcmUgYW55IGRlZHVjdGlvbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBSZWNlaXZlZDo8L3N0cm9uZz4gVGhlIGV4YWN0IGRhdGUgd2hlbiB5b3UgcmVjZWl2ZWQgdGhlIGNvbXBlbnNhdGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBBbnkgb2ZmaWNpYWwgZG9jdW1lbnRzIG9yIGp1ZGdtZW50cyBwZXJ0YWluaW5nIHRvIHRoZSBhd2FyZCBvciBzZXR0bGVtZW50LiBUaGlzIGluY2x1ZGVzIGNvdXJ0IG9yZGVycywgYWdyZWVtZW50IGxldHRlcnMsIGFuZCByZWNlaXB0cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UYXggV2l0aGhlbGQ6PC9zdHJvbmc+IElmIGFwcGxpY2FibGUsIHRoZSBhbW91bnQgb2YgZmVkZXJhbCBvciBzdGF0ZSB0YXggYWxyZWFkeSB3aXRoaGVsZCBmcm9tIHRoZSBzZXR0bGVtZW50LjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5JdCdzIGltcGVyYXRpdmUgd2UgcmVjZWl2ZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHRoZSB0YXggaW1wbGljYXRpb25zIG9mIHlvdXIgY291cnQgYXdhcmQgb3Igc2V0dGxlbWVudC4gRmFpbHVyZSB0byByZXBvcnQgc3VjaCBpbmNvbWUgYWNjdXJhdGVseSBjb3VsZCByZXN1bHQgaW4gcGVuYWx0aWVzIG9yIGF1ZGl0cyBmcm9tIHRoZSBJUlMuPC9wPiBcbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGhhdmUgYW1wbGUgdGltZSBmb3IgeW91ciB0YXggcHJlcGFyYXRpb24uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0IGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUHJpemVzIGFuZCBBd2FyZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcml6ZXMgYW5kIEF3YXJkc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxuICAgIDxwPkFzIHBhcnQgb2Ygb3VyIG9uZ29pbmcgZWZmb3J0cyB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IGFuZCBjb21wbGV0ZW5lc3Mgb2YgeW91ciB0YXggcmV0dXJuLCB3ZSBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaGF2ZSByZWNlaXZlZCBwcml6ZXMgb3IgYXdhcmRzIGluIHRoZSBmb3JtIG9mIGNhc2gsIGdvb2RzLCBvciBzZXJ2aWNlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0byB0aGUgSVJTLCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkZXRhaWxzIGZyb20geW91LjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+RGVzY3JpcHRpb24gb2YgRWFjaCBQcml6ZSBvciBBd2FyZDo8L3N0cm9uZz4gQnJpZWZseSBkZXNjcmliZSBlYWNoIHByaXplIG9yIGF3YXJkIHJlY2VpdmVkLCBpbmNsdWRpbmcgdGhlIG5hdHVyZSAoY2FzaCwgZ29vZHMsIHNlcnZpY2VzKSBhbmQgY29udGV4dCAoY29udGVzdCwgYWNoaWV2ZW1lbnQgYXdhcmQsIGV0Yy4pLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlZhbHVlIG9mIEVhY2ggUHJpemUgb3IgQXdhcmQ6PC9zdHJvbmc+IFByb3ZpZGUgdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIGVhY2ggcHJpemUgb3IgYXdhcmQgYXQgdGhlIHRpbWUgb2YgcmVjZWlwdC4gSWYgdGhlIHByaXplIHdhcyBpbiBjYXNoLCBzcGVjaWZ5IHRoZSBhbW91bnQuIElmIGluIGdvb2RzIG9yIHNlcnZpY2VzLCBwcm92aWRlIGFuIGVzdGltYXRlZCB2YWx1ZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EYXRlIG9mIFJlY2VpcHQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgb24gd2hpY2ggZWFjaCBwcml6ZSBvciBhd2FyZCB3YXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SXNzdWVyIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBQcm92aWRlIHRoZSBuYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIChpZiBhdmFpbGFibGUpIG9mIHRoZSBvcmdhbml6YXRpb24gb3IgZW50aXR5IHRoYXQgYXdhcmRlZCB0aGUgcHJpemUgb3IgcHJvdmlkZWQgdGhlIGF3YXJkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFueSBXaXRoaGVsZCBUYXhlczo8L3N0cm9uZz4gSW5kaWNhdGUgaWYgYW55IHRheGVzIHdlcmUgd2l0aGhlbGQgZnJvbSB0aGUgYXdhcmRlZCBhbW91bnQgYW5kIHByb3ZpZGUgdGhlIHdpdGhob2xkaW5nIGRvY3VtZW50KHMpLCBpZiBhdmFpbGFibGUuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkl0J3MgY3J1Y2lhbCBmb3IgdGF4IHB1cnBvc2VzIHRoYXQgd2UgcmVwb3J0IHRoZXNlIGFjY3VyYXRlbHkgdG8gYXZvaWQgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGUgSVJTLjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgYXJlIGhlcmUgdG8gYXNzaXN0IHlvdSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVGF4YWJsZSBDb3ZlcmRlbGwgRGlzdHJpYnV0aW9uc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRheGFibGUgQ292ZXJkZWxsIERpc3RyaWJ1dGlvbnNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBoYXZlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCBhIHdpdGhkcmF3YWwgZnJvbSBhIENvdmVyZGVsbCBFZHVjYXRpb24gU2F2aW5ncyBBY2NvdW50IChFU0EpIG9yIGFuIEVkdWNhdGlvbiBJUkEgZm9yIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSBkaXN0cmlidXRpb25zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IHdpdGhkcmF3biBmcm9tIHRoZSBDb3ZlcmRlbGwgRVNBIG9yIEVkdWNhdGlvbiBJUkEuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbGVkIGJyZWFrZG93biBvZiBob3cgdGhlc2UgZnVuZHMgd2VyZSB1dGlsaXplZCwgc3BlY2lmaWNhbGx5OlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgdXNlZCBmb3IgdHVpdGlvbiBhbmQgZmVlcy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnQgc3BlbnQgb24gYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciBlbnJvbGxtZW50IG9yIGF0dGVuZGFuY2UuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFtb3VudHMgc3BlbnQgb24gcm9vbSBhbmQgYm9hcmQsIHNwZWNpZnlpbmcgaWYgdGhlIGJlbmVmaWNpYXJ5IHdhcyBlbnJvbGxlZCBhdCBsZWFzdCBoYWxmLXRpbWUuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IGFkZGl0aW9uYWwgcXVhbGlmaWVkIGVkdWNhdGlvbiBleHBlbnNlcyBwYWlkIHVzaW5nIHRoZXNlIGZ1bmRzLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgdGhlIGJlbmVmaWNpYXJ5J3MgZW5yb2xsbWVudCBzdGF0dXMgKGUuZy4sIHR1aXRpb24gc3RhdGVtZW50LCBlbnJvbGxtZW50IHZlcmlmaWNhdGlvbikuPC9saT5cbiAgICAgICAgPGxpPlRoZSBuYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSBpbnZvbHZlZC48L2xpPlxuICAgICAgICA8bGk+QW55IEZvcm0gMTA5OS1RIHJlY2VpdmVkIHBlcnRhaW5pbmcgdG8gdGhlc2UgZGlzdHJpYnV0aW9ucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoaXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gd2lsbCBlbnN1cmUgdGhhdCB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cyByZWxhdGVkIHRvIGVkdWNhdGlvbiBleHBlbnNlcy4gUGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBhbmQgbGV0IHVzIGtub3cgaWYgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIGFueSBxdWVzdGlvbnMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlRheGFibGUgUVRQIERpc3RyaWJ1dGlvbnNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJUYXhhYmxlIFFUUCBEaXN0cmlidXRpb25zXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgXG4gICAgPHA+V2UgaGF2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGRpc3RyaWJ1dGlvbnMgZnJvbSBhIFF1YWxpZmllZCBUdWl0aW9uIFByb2dyYW0gKFFUUCksIGNvbW1vbmx5IGtub3duIGFzIGEgNTI5IHBsYW4sIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcmVsYXRlZCB0byB0aGVzZSBkaXN0cmlidXRpb25zLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbjxvbD5cbiAgICA8bGk+PHN0cm9uZz5BY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBUaGUgbmFtZSBvZiB0aGUgYWNjb3VudCBob2xkZXIgYW5kIHRoZSBiZW5lZmljaWFyeSBmb3IgZWFjaCA1MjkgcGxhbiBkaXN0cmlidXRpb24uPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EaXN0cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gQ29waWVzIG9mIGFsbCAxMDk5LVEgZm9ybXMgcmVjZWl2ZWQgZm9yIGVhY2ggZGlzdHJpYnV0aW9uIHRoaXMgdGF4IHllYXIuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Ub3RhbCBBbW91bnQgb2YgRGlzdHJpYnV0aW9uczo8L3N0cm9uZz4gVGhlIHRvdGFsIGFtb3VudCBvZiBtb25leSBkaXN0cmlidXRlZCBmcm9tIHRoZSBRVFAgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkVkdWNhdGlvbmFsIEV4cGVuc2VzIERvY3VtZW50YXRpb246PC9zdHJvbmc+IERldGFpbGVkIHJlY29yZHMgb2YgdGhlIGVkdWNhdGlvbmFsIGV4cGVuc2VzIGZvciB3aGljaCB0aGUgUVRQIGRpc3RyaWJ1dGlvbnMgd2VyZSB1c2VkLiBUaGlzIGluY2x1ZGVzIHR1aXRpb24sIGJvb2tzLCBzdXBwbGllcywgYW5kIGFueSBlcXVpcG1lbnQgcmVxdWlyZWQgZm9yIGVucm9sbG1lbnQgb3IgYXR0ZW5kYW5jZSBhdCBhbiBlbGlnaWJsZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxuICAgIDxsaT48c3Ryb25nPkV4cGVuc2UgUmVjZWlwdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIHN0YXRlbWVudHMgdGhhdCBwcm92aWRlIHByb29mIG9mIHRoZSBlZHVjYXRpb25hbCBleHBlbnNlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkluc3RpdHV0aW9uIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBOYW1lIGFuZCBhZGRyZXNzIG9mIHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbihzKSB3aGVyZSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlY2lwaWVudCdzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCAodGhlIGJlbmVmaWNpYXJ5IG9mIHRoZSA1MjkgcGxhbikgYW5kIHRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIuPC9saT5cbjwvb2w+XG48cD5UaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIHRheGFiaWxpdHkgb2YgdGhlIGRpc3RyaWJ1dGlvbnMgYW5kIGZvciBvcHRpbWl6aW5nIHlvdXIgdGF4IGJlbmVmaXRzLiBQbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGZlZWwgZnJlZSB0byByZWFjaCBvdXQuPC9wPlxuPHA+VGhhbmsgeW91IGZvciB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTdHJpa2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHJpa2UgQmVuZWZpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYXMgd2Ugd29yayB0b2dldGhlciB0byBhY2N1cmF0ZWx5IHByZXBhcmUgeW91ciB0YXggcmV0dXJuLiBJdCBoYXMgY29tZSB0byBvdXIgYXR0ZW50aW9uIHRoYXQgeW91IHJlY2VpdmVkIHN0cmlrZSBiZW5lZml0cyBkdXJpbmcgdGhlIHRheCB5ZWFyIGR1ZSB0byBwYXJ0aWNpcGF0aW9uIGluIGEgbGFib3Igc3RyaWtlLiBUbyBlbnN1cmUgY29tcGxpYW5jZSBhbmQgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+VG90YWwgQW1vdW50IG9mIFN0cmlrZSBCZW5lZml0cyBSZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgdGhlIHRvdGFsIHN1bSBvZiBzdHJpa2UgYmVuZWZpdHMgcmVjZWl2ZWQgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Tb3VyY2Ugb2YgU3RyaWtlIEJlbmVmaXRzOjwvc3Ryb25nPiBJbmRpY2F0ZSB3aGV0aGVyIHRoZXNlIGJlbmVmaXRzIHdlcmUgcGFpZCBieSB5b3VyIHVuaW9uLCBhbiBpbnN1cmFuY2UgcG9saWN5LCBvciBhbm90aGVyIHNvdXJjZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uIG9mIFN0cmlrZSBCZW5lZml0czo8L3N0cm9uZz4gUHJvdmlkZSBhbnkgZm9ybXMsIHN0YXRlbWVudHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gdGhhdCBzaG93IHRoZSByZWNlaXB0IG9mIHRoZXNlIGJlbmVmaXRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGVzIG9mIFN0cmlrZSBQYXJ0aWNpcGF0aW9uOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvciBkdXJhdGlvbiBvZiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIGxhYm9yIHN0cmlrZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BZGRpdGlvbmFsIENvc3RzIG9yIEV4cGVuc2VzOjwvc3Ryb25nPiBJZiB5b3UgaW5jdXJyZWQgYW55IGNvc3RzIG9yIGV4cGVuc2VzIHJlbGF0ZWQgdG8gcGFydGljaXBhdGluZyBpbiB0aGUgc3RyaWtlIChlLmcuLCB0cmF2ZWwgdG8gcGlja2V0IGxpbmVzLCBzaWduYWdlIG1hdGVyaWFscyksIHBsZWFzZSBkZXRhaWwgdGhlc2UuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybiBpcyBhY2N1cmF0ZSBhbmQgbWF5IGltcGFjdCB5b3VyIHRheGFibGUgaW5jb21lLiBQbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UgdG8gYXZvaWQgYW55IGRlbGF5cyBpbiBwcm9jZXNzaW5nIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFdlJ3JlIGhlcmUgdG8gaGVscCE8L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkp1cnkgRHV0eSBQYXlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJKdXJ5IER1dHkgUGF5XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIHJlYWNoaW5nIHRoZSBjcml0aWNhbCBzdGFnZXMgb2YgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgcmVjZWl2ZWQganVyeSBkdXR5IHBheSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlcG9ydCB0aGlzIGluY29tZSBhbmQgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGRlZHVjdGlvbnMgb3IgY3JlZGl0cywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlRvdGFsIGFtb3VudCBvZiBKdXJ5IER1dHkgUGF5Ojwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSB0aGUgdG90YWwgYW1vdW50IHlvdSByZWNlaXZlZCBmb3Igc2VydmluZyBqdXJ5IGR1dHkuIFRoaXMgYW1vdW50IGlzIG9mdGVuIHJlcG9ydGVkIG9uIEZvcm0gMTA5OS1HLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkp1cnkgRHV0eSBEYXRlczo8L3N0cm9uZz4gVGhlIGRhdGVzIHlvdSBzZXJ2ZWQgb24ganVyeSBkdXR5LiBUaGlzIGhlbHBzIGluIHZlcmlmeWluZyB0aGUgZHVyYXRpb24gYW5kIGNvcnJlbGF0aW5nIGl0IHdpdGggdGhlIGNvbXBlbnNhdGlvbiByZWNlaXZlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBSZWltYnVyc2VtZW50Ojwvc3Ryb25nPiBJZiB5b3VyIGVtcGxveWVyIGNvbXBlbnNhdGVkIHlvdSAoaW4gZnVsbCBvciBwYXJ0KSBmb3IgdGhlIHRpbWUgeW91IHdlcmUgc2VydmluZyBvbiBqdXJ5IGR1dHksIHBsZWFzZSBwcm92aWRlIGRldGFpbHMgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3VyIGVtcGxveWVyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJhbmsgU3RhdGVtZW50cyBvciBQYXkgU3R1YnM6PC9zdHJvbmc+IEFueSBiYW5rIHN0YXRlbWVudHMgb3IgcGF5IHN0dWJzIHNob3dpbmcgdGhlIGp1cnkgZHV0eSBwYXkgZGVwb3NpdCBvciBlbXBsb3llciByZWltYnVyc2VtZW50cy4gVGhlc2UgZG9jdW1lbnRzIGhlbHAgaW4gdmVyaWZ5aW5nIHRoZSBhbW91bnRzIGRlY2xhcmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OS1HIChpZiByZWNlaXZlZCk6PC9zdHJvbmc+IFNvbWUganVyaXNkaWN0aW9ucyBwcm92aWRlIGEgRm9ybSAxMDk5LUcgZm9yIGp1cnkgZHV0eSBwYXkuIElmIHlvdSByZWNlaXZlZCBvbmUsIHBsZWFzZSBpbmNsdWRlIGEgY29weS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB3aWxsIGFsbG93IHVzIHRvIGVuc3VyZSB5b3VyIHRheCBmaWxpbmdzIGFyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsYXNrYSBQZXJtYW5lbnQgRnVuZHMgRGl2aWRlbmRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQWxhc2thIFBlcm1hbmVudCBGdW5kcyBEaXZpZGVuZHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5JbiByZXZpZXdpbmcgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGZvciB5b3VyIHRheCByZXR1cm4gcHJlcGFyYXRpb24sIHdlIG5vdGVkIHRoYXQgeW91IGluZGljYXRlZCByZWNlaXZpbmcgZGl2aWRlbmRzIGZyb20gdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBpbmZvcm1hdGlvbiBvbiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggdGhlIElSUyBndWlkZWxpbmVzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRldGFpbHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxiPjEwOTktTUlTQyBGb3JtOjwvYj4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSAxMDk5LU1JU0MgZm9ybSBpc3N1ZWQgYnkgdGhlIEFsYXNrYSBQZXJtYW5lbnQgRnVuZCBDb3Jwb3JhdGlvbi4gVGhpcyBmb3JtIG91dGxpbmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgZGl2aWRlbmRzIHJlY2VpdmVkIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxiPkJhbmsgU3RhdGVtZW50czo8L2I+IElmIHBvc3NpYmxlLCBwcm92aWRlIGJhbmsgc3RhdGVtZW50cyBzaG93aW5nIHRoZSBkZXBvc2l0KHMpIG9mIHRoZSBkaXZpZGVuZHMgaW50byB5b3VyIGFjY291bnQuIFRoaXMgc2VydmVzIGFzIGFkZGl0aW9uYWwgcHJvb2Ygb2YgaW5jb21lLjwvbGk+XG4gICAgICAgIDxsaT48Yj5QZXJzb25hbCBJZGVudGlmaWNhdGlvbiBJbmZvcm1hdGlvbjo8L2I+IENvbmZpcm0geW91ciBmdWxsIGxlZ2FsIG5hbWUgYW5kIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBkaXNjcmVwYW5jaWVzIGJldHdlZW4gb3VyIHJlY29yZHMgYW5kIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBvbiB0aGUgMTA5OS1NSVNDIGZvcm0uPC9saT5cbiAgICAgICAgPGxpPjxiPlByZXZpb3VzIFllYXIncyBEaXZpZGVuZCBJbmZvcm1hdGlvbjo8L2I+IElmIHlvdSByZWNlaXZlZCBkaXZpZGVuZHMgZnJvbSB0aGUgQWxhc2thIFBlcm1hbmVudCBGdW5kIGluIHRoZSBwcmV2aW91cyB0YXggeWVhciBidXQgaGF2ZSBub3QgcHJvdmlkZWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIHNvLiBJdCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIHRvIHBvdGVudGlhbGx5IGlkZW50aWZ5IGFueSBjYXJyeW92ZXIgZWZmZWN0cyBvbiB5b3VyIGN1cnJlbnQgdGF4IHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPllvdXIgcHJvbXB0IHJlc3BvbnNlIHRvIHRoaXMgcmVxdWVzdCBpcyBoaWdobHkgYXBwcmVjaWF0ZWQuIENvbXBsZXRpbmcgdGhpcyBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHdpbGwgZW5hYmxlIHVzIHRvIHByb2dyZXNzIHdpdGggdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybiBlZmZpY2llbnRseS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMsIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhlY3V0b3IgRmVlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkV4ZWN1dG9yIEZlZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5XZSB1bmRlcnN0YW5kIGZyb20geW91ciByZWNlbnQgcmVzcG9uc2UgdGhhdCB5b3UgaGF2ZSBwYWlkIG9yIHJlY2VpdmVkIGV4ZWN1dG9yIGZlZXMuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgdGF4IHByZXBhcmF0aW9uLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlc2UgdHJhbnNhY3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cbjxvbD5cbiAgPGxpPkEgZGV0YWlsZWQgc3RhdGVtZW50IG9mIHRoZSBleGVjdXRvciBmZWVzIHBhaWQgb3IgcmVjZWl2ZWQsIGluY2x1ZGluZyBkYXRlcyBhbmQgYW1vdW50cy48L2xpPlxuICA8bGk+SWYgeW91IHJlY2VpdmVkIGV4ZWN1dG9yIGZlZXMsIHBsZWFzZSBwcm92aWRlIHlvdXIgcm9sZSAoZS5nLiwgcHJpbWFyeSBleGVjdXRvciwgY28tZXhlY3V0b3IpIGFuZCB0aGUgZXN0YXRlJ3MgbmFtZS48L2xpPlxuICA8bGk+SWYgeW91IHBhaWQgZXhlY3V0b3IgZmVlcywgcHJvdmlkZSB0aGUgbmFtZSBhbmQgdGF4IGlkZW50aWZpY2F0aW9uIG51bWJlciAoU1NOIG9yIEVJTikgb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRvIHdob20gdGhlIGZlZXMgd2VyZSBwYWlkLjwvbGk+XG4gIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiB0aGF0IG91dGxpbmVzIHRoZSBhZ3JlZW1lbnQgb3IgY291cnQgb3JkZXIgcmVnYXJkaW5nIHRoZSBleGVjdXRvciBmZWUuPC9saT5cbiAgPGxpPkNvcGllcyBvZiBiYW5rIHN0YXRlbWVudHMgb3IgY2FuY2VsbGVkIGNoZWNrcyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9yIHJlY2VpcHQgb2YgdGhlc2UgZmVlcy48L2xpPlxuICA8bGk+Rm9yIGZlZXMgcmVjZWl2ZWQsIHBsZWFzZSBjb25maXJtIHdoZXRoZXIgdGF4ZXMgd2VyZSB3aXRoaGVsZCBvciBub3QuIElmIHNvLCBwcm92aWRlIGEgY29weSBvZiB0aGUgRm9ybSAxMDk5LU1JU0MgeW91IHJlY2VpdmVkLjwvbGk+XG48L29sPlxuPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBkZXRlcm1pbmluZyB0aGUgdGF4IGltcGxpY2F0aW9ucyBvZiB0aGVzZSBleGVjdXRvciBmZWVzIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIGd1aWRlbGluZXMuIFBsZWFzZSBzZW5kIHRoZSBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIHVzIHRvIGZhY2lsaXRhdGUgYSB0aW1lbHkgYW5kIGFjY3VyYXRlIHRheCBmaWxpbmcuPC9wPlxuPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJFdmVudCBHcmF0dWl0aWVzIGFuZCBHaWZ0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkV2ZW50IEdyYXR1aXRpZXMgYW5kIEdpZnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGNvbXBsZXRpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBuZWVkIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIHBhcnRpZXMgb3IgZXZlbnRzIHlvdSBob3N0ZWQgdGhpcyB0YXggeWVhci4gU3BlY2lmaWNhbGx5LCBzaW5jZSB5b3UgaW5kaWNhdGVkIHRoYXQgeW91IHJlY2VpdmVkIGdpZnRzLCBncmF0dWl0aWVzLCBvciBvdGhlciBmb3JtcyBvZiBjb21wZW5zYXRpb24gYXMgYSByZXN1bHQgb2YgdGhlc2UgZXZlbnRzLCB3ZSByZXF1aXJlIGRldGFpbGVkIGluZm9ybWF0aW9uIHRvIGVuc3VyZSBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCB0YXggcmVndWxhdGlvbnMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIGVhY2ggZXZlbnQgaG9zdGVkLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgdGhlIGV2ZW50LjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkxvY2F0aW9uIG9mIHRoZSBldmVudC48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BcHByb3hpbWF0ZSBudW1iZXIgb2YgYXR0ZW5kZWVzLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlB1cnBvc2Ugb2YgdGhlIGV2ZW50IChlLmcuLCBzYWxlcyBwcm9tb3Rpb24sIGN1c3RvbWVyIGFwcHJlY2lhdGlvbikuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5Eb2N1bWVudGF0aW9uIGZvciBlYWNoIGdpZnQsIGdyYXR1aXR5LCBvciBmb3JtIG9mIGNvbXBlbnNhdGlvbiByZWNlaXZlZCwgc3VjaCBhczpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+RGVzY3JpcHRpb24gb2YgdGhlIGdpZnQgb3IgZ3JhdHVpdHkuPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+RXN0aW1hdGVkIGZhaXIgbWFya2V0IHZhbHVlIGF0IHRoZSB0aW1lIHJlY2VpdmVkLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPk5hbWUgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gb2YgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHByb3ZpZGluZyB0aGUgZ2lmdCBvciBncmF0dWl0eS48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbnkgZG9jdW1lbnRhdGlvbiBvciBjb21tdW5pY2F0aW9uIHJlZ2FyZGluZyB0aGUgcmVjZWlwdCBvZiB0aGVzZSBpdGVtcyAoZS5nLiwgdGhhbmsgeW91IGxldHRlcnMsIGVtYWlscyBjb25maXJtaW5nIHJlY2VpcHQpLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+QW55IHJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gcmVsYXRlZCB0byBleHBlbnNlcyBpbmN1cnJlZCB3aGlsZSBob3N0aW5nIHRoZXNlIGV2ZW50cyAoZS5nLiwgY2F0ZXJpbmcsIHZlbnVlIHJlbnRhbCwgZW50ZXJ0YWlubWVudCkuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSBhY2N1cmF0ZWx5IHJlcG9ydCBhbGwgZm9ybXMgb2YgaW5jb21lLCBpbmNsdWRpbmcgbm9uLW1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgdG8gY29tcGx5IHdpdGggSVJTIHJlZ3VsYXRpb25zLiBZb3VyIHByb21wdCByZXNwb25zZSB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gd2lsbCBncmVhdGx5IGFzc2lzdCBpbiB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUXVhbGlmaWVkIEVkdWNhdG9yIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgY29tcHJlaGVuc2l2ZSBhcHByb2FjaCB0byB5b3VyIHRheCBwcmVwYXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgeWVhciwgeW91IGhhdmUgaW5kaWNhdGVkIHRoYXQgeW91J3ZlIGluY3VycmVkIG91dC1vZi1wb2NrZXQgZXhwZW5zZXMgYXMgYSBxdWFsaWZpZWQgZWR1Y2F0b3IgZm9yIGNsYXNzcm9vbSBtYXRlcmlhbHMgb3Igc3VwcGxpZXMuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlc2UgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGJlbmVmaXQsIHdlIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PGI+RGV0YWlsZWQgTGlzdCBvZiBFeHBlbnNlczo8L2I+IEEgYnJlYWtkb3duIG9mIGFsbCBjbGFzc3Jvb20gbWF0ZXJpYWxzIG9yIHN1cHBsaWVzIHB1cmNoYXNlZCwgaW5jbHVkaW5nIGJvb2tzLCBzdXBwbGllcywgY29tcHV0ZXIgZXF1aXBtZW50IChoYXJkd2FyZSwgc29mdHdhcmUsIGFuZCBzZXJ2aWNlcyksIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgbWF0ZXJpYWxzLjwvbGk+XG4gICAgICAgIDxsaT48Yj5SZWNlaXB0cyBhbmQgUHJvb2Ygb2YgUGF5bWVudDo8L2I+IENvcGllcyBvZiByZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgZm9yIGVhY2ggcHVyY2hhc2UgbWFkZS4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZSBkYXRlIG9mIHB1cmNoYXNlIGFuZCB0aGUgaXRlbSBvciBzZXJ2aWNlIHB1cmNoYXNlZCBhcmUgY2xlYXJseSB2aXNpYmxlLjwvbGk+XG4gICAgICAgIDxsaT48Yj5EYXRlIG9mIFB1cmNoYXNlczo8L2I+IFRoZSBzcGVjaWZpYyBkYXRlcyBlYWNoIGl0ZW0gd2FzIHB1cmNoYXNlZCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48Yj5Vc2FnZSBEb2N1bWVudGF0aW9uOjwvYj4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgZWFjaCBpdGVtIHB1cmNoYXNlZCB3YXMgdXNlZCBpbiB0aGUgY2xhc3Nyb29tIHNldHRpbmcuPC9saT5cbiAgICAgICAgPGxpPjxiPlRvdGFsIEFtb3VudDo8L2I+IFRoZSB0b3RhbCBkb2xsYXIgYW1vdW50IHNwZW50IG9uIHRoZXNlIG1hdGVyaWFscyBhbmQgc3VwcGxpZXMgb3ZlciB0aGUgY291cnNlIG9mIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VW5kZXJzdGFuZGluZyB0aGF0IHlvdXIgdGltZSBpcyB2YWx1YWJsZSwgd2UgYXBwcmVjaWF0ZSB5b3VyIGVmZm9ydCBpbiBjb21waWxpbmcgdGhpcyBpbmZvcm1hdGlvbiBwcm9tcHRseS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmluZyB5b3UgYXJlIGNvbXBlbnNhdGVkIGZvciB5b3VyIGludmVzdG1lbnQgaW4gZWR1Y2F0aW9uYWwgbWF0ZXJpYWxzLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHdlIGNhbiBwcm9jZWVkIHdpdGhvdXQgZGVsYXkuIFlvdSBjYW4gc2VuZCB0aGUgZG9jdW1lbnRzIHRvIHVzIGVpdGhlciB2aWEgZW1haWwgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIG9yIHVwbG9hZCB0aGVtIGRpcmVjdGx5IHRocm91Z2ggb3VyIHNlY3VyZSBjbGllbnQgcG9ydGFsLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBhc3Npc3QgeW91IHRocm91Z2ggZXZlcnkgc3RlcCBvZiB0aGUgcHJvY2Vzcy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIGF0dGVudGlvbiB0byB0aGlzIG1hdHRlciBhbmQgeW91ciBkZWRpY2F0aW9uIGFzIGFuIGVkdWNhdG9yLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQXJtZWQgRm9yY2VzIFJlc2VydmlzdCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIGlkZW50aWZpZWQgdGhhdCB5b3UgaW5jdXJyZWQgdW5yZWltYnVyc2VkIHRyYXZlbCBleHBlbnNlcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0LiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIGJlbmVmaWNpYWwgdGF4IGZpbGluZywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgZnJvbSB5b3U6PC9wPlxuICAgIDxvbD5cbiAgICA8bGk+PHN0cm9uZz5TdW1tYXJ5IG9mIFRyYXZlbCBEYXRlczo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGFsbCBkYXRlcyB5b3UgdHJhdmVsZWQgbW9yZSB0aGFuIDEwMCBtaWxlcyBhd2F5IGZyb20gaG9tZSB0byBwZXJmb3JtIHlvdXIgcmVzZXJ2ZSBkdXRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5UcmF2ZWwgRXhwZW5zZXMgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRm9yIGVhY2ggb2YgdGhlIHRyYXZlbCBkYXRlcyBsaXN0ZWQsIHByb3ZpZGUgcmVjZWlwdHMsIG9yIG90aGVyIGRvY3VtZW50YXRpb24gZm9yOlxuICAgICAgICA8dWw+XG4gICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiAoZS5nLiwgZ2FzIHJlY2VpcHRzLCBtaWxlYWdlIGxvZ3MsIGFpcnBsYW5lIHRpY2tldHMsIGV0Yy4pPC9saT5cbiAgICAgICAgPGxpPkxvZGdpbmcgKG9ubHkgaWYgYW4gb3Zlcm5pZ2h0IHN0YXkgd2FzIHJlcXVpcmVkKTwvbGk+XG4gICAgICAgIDxsaT5NZWFscyBhbmQgSW5jaWRlbnRhbCBFeHBlbnNlcyAoZGV0YWlscyBvbiBlYWNoLCBpZiBub3Qgb3B0aW5nIGZvciB0aGUgc3RhbmRhcmQgbWVhbCBhbGxvd2FuY2UpPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2VydmUgU3RhdHVzOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBvcmRlcnMgb3IgYW55IGRvY3VtZW50YXRpb24gY29uZmlybWluZyB5b3VyIHBhcnRpY2lwYXRpb24gYW5kIGR1dGllcyBhcyBhbiBBcm1lZCBGb3JjZXMgUmVzZXJ2aXN0IGR1cmluZyB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uPC9saT5cbiAgICA8bGk+PHN0cm9uZz5TdGF0ZW1lbnQgb2YgUmVpbWJ1cnNlbWVudDo8L3N0cm9uZz4gQSBkZXRhaWxlZCBhY2NvdW50IG9mIGFueSByZWltYnVyc2VtZW50cyByZWNlaXZlZCBmb3IgdGhlIHRyYXZlbCBleHBlbnNlcyBjbGFpbWVkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgbGVnaWJsZSBhbmQgY2xlYXJseSBsYWJlbGVkLiBQcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGFsbG93IHN1ZmZpY2llbnQgdGltZSBmb3IgcHJvY2Vzc2luZyBhbmQgaW5jbHVzaW9uIGluIHlvdXIgdGF4IGZpbGluZy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQZXJmb3JtaW5nIEFydGlzdCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlBlcmZvcm1pbmcgQXJ0aXN0IEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGFjY291bnQgZm9yIHlvdXIgZXhwZW5zZXMgYXMgYSBwZXJmb3JtaW5nIGFydGlzdC4gVGhlIGZvbGxvd2luZyBsaXN0IGRldGFpbHMgdGhlIHNwZWNpZmljIGpvYi1yZWxhdGVkIGV4cGVuc2VzIHRoYXQgd2UgcmVxdWlyZS4gS2luZGx5IHJldmlldyBhbmQgcHJvdmlkZSB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBhIHRob3JvdWdoIGFuZCB0aW1lbHkgcHJlcGFyYXRpb24gb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkF1ZGl0aW9uIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBvciBiYW5rL2NyZWRpdCBjYXJkIHN0YXRlbWVudHMgc2hvd2luZyBwYXltZW50cyBmb3IgYXVkaXRpb25zLCBpbmNsdWRpbmcgYW55IGFwcGxpY2F0aW9uIG9yIGVudHJ5IGZlZXMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VHJhdmVsIEV4cGVuc2VzOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIGZvciB0cmF2ZWwgY29zdHMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZXMuIFRoaXMgaW5jbHVkZXMgYWlyZmFyZSwgbG9kZ2luZywgY2FyIHJlbnRhbHMsIGFuZCBnYXNvbGluZSByZWNlaXB0cy4gUGxlYXNlIGluZGljYXRlIHRoZSBkYXRlcyBhbmQgcHVycG9zZSBvZiBlYWNoIHRyaXAuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdHVtZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgZm9yIGFueSBjb3N0dW1lcyBvciBzcGVjaWFsaXplZCBjbG90aGluZyByZXF1aXJlZCBmb3IgeW91ciBwZXJmb3JtYW5jZXMgdGhhdCBhcmUgbm90IHN1aXRhYmxlIGZvciBldmVyeWRheSB3ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1ha2V1cC9IYWlyIEV4cGVuc2VzOjwvc3Ryb25nPiBTcGVjaWZpYyB0byBwZXJmb3JtYW5jZXMsIGluY2x1ZGluZyBjb3N0cyBmb3IgcHJvZHVjdHMgYW5kIHByb2Zlc3Npb25hbCBzZXJ2aWNlcy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5UcmFpbmluZyBhbmQgUHJvZmVzc2lvbmFsIERldmVsb3BtZW50Ojwvc3Ryb25nPiBDb3N0cyByZWxhdGVkIHRvIGNsYXNzZXMsIHdvcmtzaG9wcywgb3Igc2VtaW5hcnMgYWltZWQgYXQgaW1wcm92aW5nIHlvdXIgcGVyZm9ybWFuY2Ugc2tpbGxzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFnZW50IGFuZCBNYW5hZ2VtZW50IEZlZXM6PC9zdHJvbmc+IENvbnRyYWN0cyBvciBzdGF0ZW1lbnRzIGRldGFpbGluZyBwYXltZW50cyB0byBhZ2VudHMgb3IgbWFuYWdlcnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+TWlzY2VsbGFuZW91cyBQZXJmb3JtYW5jZS1SZWxhdGVkIEV4cGVuc2VzOjwvc3Ryb25nPiBSZWNlaXB0cyBmb3IgYW55IG90aGVyIGV4cGVuc2VzIGRpcmVjdGx5IHJlbGF0ZWQgdG8geW91ciB3b3JrIGFzIGEgcGVyZm9ybWluZyBhcnRpc3QsIHN1Y2ggYXMgZXF1aXBtZW50LCBtdXNpYyBvciBzY3JpcHQgcHVyY2hhc2VzLCBhbmQgbWFpbnRlbmFuY2UgY29zdHMgZm9yIGluc3RydW1lbnRzIG9yIHBlcmZvcm1hbmNlIGdlYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgcHJvdmlkZWQgZG9jdW1lbnRzIGNsZWFybHkgaW5kaWNhdGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIG5hdHVyZSBvZiBlYWNoIGV4cGVuc2UuIElmIHlvdSdyZSB1bnN1cmUgd2hldGhlciBhbiBleHBlbnNlIHF1YWxpZmllcywgaW5jbHVkZSBpdCB3aXRoIGEgYnJpZWYgbm90ZSBleHBsYWluaW5nIGl0cyBwdXJwb3NlLiBXZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyB3aGlsZSBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiwgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZlZSBCYXNlZCBHb3Zlcm5tZW50IE9mZmljaWFsIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRmVlIEJhc2VkIEdvdmVybm1lbnQgT2ZmaWNpYWwgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcHJvY2Vzc2luZyB5b3VyIHRheCByZXR1cm5zIGFuZCBub3RlZCB0aGF0IHlvdSB3b3JrZWQgYXMgYSA8c3Ryb25nPmZlZS1iYXNlZCBnb3Zlcm5tZW50IG9mZmljaWFsPC9zdHJvbmc+IGR1cmluZyB0aGUgdGF4IHllYXIuIEFzIHBhcnQgb2YgdGhpcyByb2xlLCB5b3UndmUgcmVwb3J0ZWQgaW5jdXJyaW5nIHVucmVpbWJ1cnNlZCBleHBlbnNlcyByZWxhdGVkIHRvIHlvdXIgb2ZmaWNpYWwgZHV0aWVzLiBUbyBlbnN1cmUgYWNjdXJhdGUgYW5kIG1heGltdW0gZGVkdWN0aW9ucyBvbiB5b3VyIHRheCBmaWxpbmdzLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+RGV0YWlsZWQgRXhwZW5zZSBSZXBvcnRzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgZXhwZW5zZXMuIEVhY2ggZW50cnkgc2hvdWxkIGluY2x1ZGUgdGhlIGRhdGUsIGFtb3VudCwgYW5kIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIG5hdHVyZSBvZiB0aGUgZXhwZW5zZS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUGF5bWVudDo8L3N0cm9uZz4gUmVjZWlwdHMsIGJhbmsgc3RhdGVtZW50cywgb3IgY3JlZGl0IGNhcmQgc3RhdGVtZW50cyBldmlkZW5jaW5nIHRoZSBwYXltZW50IG9mIHRoZSByZXBvcnRlZCBleHBlbnNlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T2ZmaWNpYWwgU2NoZWR1bGUgb3IgRHV0eSBSb3N0ZXI6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gdGhhdCBjb3JyZWxhdGVzIHlvdXIgcmVwb3J0ZWQgZXhwZW5zZXMgd2l0aCB5b3VyIG9mZmljaWFsIGR1dGllcyBvbiBzcGVjaWZpYyBkYXRlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+TWlsZWFnZSBMb2c6PC9zdHJvbmc+IElmIGFueSBleHBlbnNlcyBhcmUgZm9yIHRyYXZlbCwgYSBkZXRhaWxlZCBtaWxlYWdlIGxvZyBzaG93aW5nIGRhdGVzLCBkZXN0aW5hdGlvbiwgcHVycG9zZSBvZiB0aGUgdHJpcCwgYW5kIG1pbGVzIHRyYXZlbGVkLiBFbnN1cmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHBlcnNvbmFsIGFuZCBvZmZpY2lhbCB0cmF2ZWwuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNvbW11bmljYXRpb24gd2l0aCBHb3Zlcm5tZW50IEFnZW5jeTo8L3N0cm9uZz4gQW55IGNvcnJlc3BvbmRlbmNlIHdpdGggdGhlIGdvdmVybm1lbnQgYWdlbmN5IGNvbmZpcm1pbmcgdGhhdCB0aGVzZSBleHBlbnNlcyB3ZXJlIG5vdCByZWltYnVyc2VkLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgaXMgbGVnaWJsZSBhbmQgb3JnYW5pemVkIGNocm9ub2xvZ2ljYWxseS4gVGhpcyB3aWxsIGdyZWF0bHkgYXNzaXN0IGluIHRoZSBzcGVlZHkgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCBmaWxpbmdzIGFuZCBpbiBtYXhpbWl6aW5nIHlvdXIgZWxpZ2libGUgZGVkdWN0aW9ucy48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2XigJlyZSBoZXJlIHRvIGhlbHAgZXZlcnkgc3RlcCBvZiB0aGUgd2F5ITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJIU0EgRGVkdWN0aW9uIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiSFNBIERlZHVjdGlvbiBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgY29uZmlybWluZyB5b3VyIEhlYWx0aCBTYXZpbmdzIEFjY291bnQgKEhTQSkgY29udHJpYnV0aW9ucyBkdXJpbmcgdGhlIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIEhTQSBkZWR1Y3Rpb24gYW5kIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cywgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRldGFpbGVkIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEhTQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IHlvdXIgZW1wbG95ZXIgdG8gdGhlIEhTQSAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMsIGlmIHRoZXkgd2VyZSBub3QgbWFkZSBpbiBhIGx1bXAgc3VtLjwvbGk+XG4gICAgICAgIDxsaT5Qcm9vZiBvZiBIU0EgZWxpZ2liaWxpdHkgZm9yIHRoZSB0YXggeWVhciAodHlwaWNhbGx5LCB0aGlzIGludm9sdmVzIHByb29mIG9mIGEgSGlnaCBEZWR1Y3RpYmxlIEhlYWx0aCBQbGFuKS48L2xpPlxuICAgICAgICA8bGk+U3RhdGVtZW50cyBmcm9tIHlvdXIgSFNBIHByb3ZpZGVyIGRldGFpbGluZyBkaXN0cmlidXRpb25zLCBpZiBhbnkgd2VyZSBtYWRlLjwvbGk+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgbWVkaWNhbCBleHBlbnNlcyBwYWlkIG91dCBvZiB0aGUgSFNBLCBpZiBhbnkuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYm90aCB0aGUgYWNjdXJhdGUgZmlsaW5nIG9mIHlvdXIgdGF4ZXMgYW5kIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIHJlZ2FyZGluZyBIU0FzLiBQbGVhc2UgcmVzcG9uZCB3aXRoIHRoZXNlIGRvY3VtZW50cyBhbmQgZGV0YWlscyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyBuZWVkZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbi48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQXJtZWQgRm9yY2VzIE1vdmluZyBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFybWVkIEZvcmNlcyBNb3ZpbmcgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm4gZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLCB5b3UgaW5kaWNhdGVkIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW92aW5nIGV4cGVuc2VzIHJlbGF0ZWQgdG8gYSBwZXJtYW5lbnQgY2hhbmdlIG9mIHN0YXRpb24gYXMgYSBtZW1iZXIgb2YgdGhlIEFybWVkIEZvcmNlcy4gVG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRvIHBvdGVudGlhbGx5IHF1YWxpZnkgZm9yIHJlbGF0ZWQgZGVkdWN0aW9ucyBvciBleGNsdXNpb25zLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxiPk9yZGVycyBmb3IgUGVybWFuZW50IENoYW5nZSBvZiBTdGF0aW9uOjwvYj4gQSBjb3B5IG9mIHRoZSBvZmZpY2lhbCBvcmRlcnMgdGhhdCBpbml0aWF0ZWQgdGhlIG1vdmUuIFRoaXMgc2hvdWxkIGRldGFpbCB0aGUgbW92ZSBpcyBkdWUgdG8gbWlsaXRhcnkgb3JkZXJzIGFuZCBpbmRpY2F0ZSBib3RoIHlvdXIgcHJldmlvdXMgYW5kIG5ldyBkdXR5IHN0YXRpb25zLjwvbGk+XG4gICAgICA8bGk+PGI+UmVjZWlwdHMgYW5kIFJlY29yZHMgb2YgTW92aW5nIEV4cGVuc2VzOjwvYj4gRGV0YWlsZWQgcmVjZWlwdHMgb3IgcmVjb3JkcyBvZiBhbGwgbW92aW5nLXJlbGF0ZWQgZXhwZW5zZXMuIFRoaXMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5UcmFuc3BvcnRhdGlvbiBjb3N0cyAoZS5nLiwgY29zdHMgYXNzb2NpYXRlZCB3aXRoIG1vdmluZyBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMpPC9saT5cbiAgICAgICAgICA8bGk+VHJhdmVsIGV4cGVuc2VzIHRvIHRoZSBuZXcgaG9tZSAoZS5nLiwgbG9kZ2luZyBjb3N0cyBlbiByb3V0ZSwgYnV0IG5vdCBtZWFscyk8L2xpPlxuICAgICAgICAgIDxsaT5TdG9yYWdlIGV4cGVuc2VzIGZvciBob3VzZWhvbGQgZ29vZHMgYW5kIHBlcnNvbmFsIGVmZmVjdHMsIGlmIGFwcGxpY2FibGU8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT48Yj5MZWFzZSBUZXJtaW5hdGlvbiBEb2N1bWVudGF0aW9uOjwvYj4gSWYgYXBwbGljYWJsZSwgZG9jdW1lbnRhdGlvbiBzaG93aW5nIGFueSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggYnJlYWtpbmcgYSBsZWFzZSBkdWUgdG8gdGhlIG1vdmUuPC9saT5cbiAgICAgIDxsaT48Yj5Qcm9vZiBvZiBOZXcgUmVzaWRlbmNlOjwvYj4gQSBkb2N1bWVudCBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIG9mIHlvdXIgbmV3IHBlcm1hbmVudCByZXNpZGVuY2UuIFRoaXMgY2FuIGluY2x1ZGUgYSB1dGlsaXR5IGJpbGwsIG5ldyBsZWFzZSBhZ3JlZW1lbnQsIG9yIGhvbWVvd25lcidzIGluc3VyYW5jZSBkb2N1bWVudHMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBub3RlLCB0byB0YWtlIGFkdmFudGFnZSBvZiBhbnkgZXhjbHVzaW9ucyBvciBkZWR1Y3Rpb25zIHJlbGF0ZWQgdG8gQXJtZWQgRm9yY2VzIG1vdmluZyBleHBlbnNlcywgdGhlc2UgZG9jdW1lbnRzIGFyZSBuZWNlc3NhcnkgdG8gdmVyaWZ5IHRoZSBleHBlbnNlcyBpbmN1cnJlZC4gV2UgdW5kZXJzdGFuZCB0aGUgc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGVzZSBkb2N1bWVudHMgYW5kIGFzc3VyZSB5b3UgdGhhdCBhbGwgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2lsbCBiZSBrZXB0IGNvbmZpZGVudGlhbCBhbmQgdXNlZCBleGNsdXNpdmVseSBmb3IgdGhlIHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+V2UgYXBwcmVjaWF0ZSB5b3VyIGNvb3BlcmF0aW9uIGFuZCBwcm9tcHQgcmVzcG9uc2UgaW4gcHJvdmlkaW5nIHRoZXNlIGRvY3VtZW50cyB0byB1cy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRlZHVjdGlibGUgU2VsZiBFbXBsb3ltZW50IFBhcnQgVGF4ZXNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEZWR1Y3RpYmxlIFNlbGYgRW1wbG95bWVudCBQYXJ0IFRheGVzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QXMgcGFydCBvZiBvdXIgb25nb2luZyBlZmZvcnRzIHRvIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucyBhbmQgZW5zdXJlIHRoZSBhY2N1cmFjeSBvZiB5b3VyIHRheCBmaWxpbmdzLCB3ZSd2ZSBpZGVudGlmaWVkIGEgcG90ZW50aWFsIGFkanVzdG1lbnQgZm9yIGhhbGYgb2YgeW91ciBzZWxmLWVtcGxveW1lbnQgdGF4LiBUaGlzIGludm9sdmVzIHRoZSBkZWR1Y3Rpb24gb2YgaGFsZiBvZiB0aGUgc2VsZi1lbXBsb3ltZW50IHRheCB5b3UndmUgcGFpZCBmb3IgdGhlIGN1cnJlbnQgeWVhciwgd2hpY2ggY29udHJpYnV0ZXMgdG93YXJkcyB5b3VyIFNvY2lhbCBTZWN1cml0eSBhbmQgTWVkaWNhcmUuPC9wPlxuICAgIDxwPlRvIHByb2NlZWQgd2l0aCB0aGlzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+U2VsZi1FbXBsb3ltZW50IFRheCBDYWxjdWxhdGlvbjo8L3N0cm9uZz4gQSBkZXRhaWxlZCBjYWxjdWxhdGlvbiBvZiB5b3VyIHNlbGYtZW1wbG95bWVudCB0YXggZm9yIHRoZSBjdXJyZW50IHRheCB5ZWFyLiBUaGlzIG1heSBpbmNsdWRlIGEgc3VtbWFyeSBvZiB5b3VyIG5ldCBlYXJuaW5ncyBmcm9tIHNlbGYtZW1wbG95bWVudC48L2xpPlxuICAgIDxsaT48c3Ryb25nPlRvdGFsIFNlbGYtRW1wbG95bWVudCBUYXggUGFpZDo8L3N0cm9uZz4gT2ZmaWNpYWwgcmVjZWlwdHMgb3IgZG9jdW1lbnRzIHNob3dpbmcgdGhlIHRvdGFsIGFtb3VudCBvZiBzZWxmLWVtcGxveW1lbnQgdGF4IHBhaWQgZm9yIHRoZSB5ZWFyLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+SWRlbnRpZmljYXRpb24gb2YgUGF5bWVudHM6PC9zdHJvbmc+IERvY3VtZW50YXRpb24gb3IgbGVkZ2VycyBpbmRpY2F0aW5nIHBheW1lbnRzIG1hZGUgdG93YXJkcyBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRocm91Z2ggc2VsZi1lbXBsb3ltZW50IHRheC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBkb2N1bWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgdGF4ZXMgYW5kIGVuc3VyaW5nIHlvdSByZWNlaXZlIGFsbCBlbnRpdGxlZCBkZWR1Y3Rpb25zLiBQbGVhc2UgcHJvdmlkZSB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gT3VyIHRlYW0gaXMgaGVyZSB0byBzdXBwb3J0IHlvdSB0aHJvdWdoIGV2ZXJ5IHN0ZXAgb2YgdGhlIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNFUCBJUkEgQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBTRVAgSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYFxuICAgIDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBoYXZlIG5vdGVkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFNFUC1JUkEgKFNpbXBsaWZpZWQgRW1wbG95ZWUgUGVuc2lvbiBJbmRpdmlkdWFsIFJldGlyZW1lbnQgQWNjb3VudCkgdGhpcyB0YXggeWVhciBhcyBhIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbC4gRm9yIGFjY3VyYXRlIHJlcG9ydGluZyBhbmQgdG8gbWF4aW1pemUgeW91ciBwb3RlbnRpYWwgdGF4IGJlbmVmaXRzLCB3ZSBraW5kbHkgcmVxdWVzdCB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+U0VQLUlSQSBDb250cmlidXRpb24gU3RhdGVtZW50czo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYWxsIHN0YXRlbWVudHMgb3IgcmVjZWlwdHMgc2hvd2luZyB0aGUgY29udHJpYnV0aW9ucyBtYWRlIHRvIHlvdXIgU0VQLUlSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFNlbGYtRW1wbG95ZWQgSW5jb21lOjwvc3Ryb25nPiBBcyB5b3VyIFNFUC1JUkEgY29udHJpYnV0aW9uIGxpbWl0cyBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIHNlbGYtZW1wbG95ZWQgaW5jb21lLCBwbGVhc2UgZW5zdXJlIHdlIGhhdmUgYWxsIHJlbGV2YW50IGluY29tZSBkb2N1bWVudGF0aW9uLiBUaGlzIG1heSBpbmNsdWRlLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIDEwOTkgZm9ybXMsIHByb2ZpdCBhbmQgbG9zcyBzdGF0ZW1lbnRzLCBhbmQgYnVzaW5lc3MgYmFuayBzdGF0ZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlNjaGVkdWxlIEMgKEZvcm0gMTA0MCkgb3IgRXF1aXZhbGVudDo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgZG9uZSBzbywgcGxlYXNlIHByb3ZpZGUgYSBjb21wbGV0ZWQgU2NoZWR1bGUgQyBvciBlcXVpdmFsZW50IGRvY3VtZW50YXRpb24gdGhhdCBkZXRhaWxzIHlvdXIgYnVzaW5lc3MgZWFybmluZ3MgYW5kIGV4cGVuc2VzLiBUaGlzIHdpbGwgaGVscCBpbiBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgbWF4aW11bSBkZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbi48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbnkgUHJpb3IgWWVhciBDb250cmlidXRpb24gRGV0YWlsczo8L3N0cm9uZz4gSWYgeW91IGhhdmUgbWFkZSBjb250cmlidXRpb25zIGluIHByaW9yIHllYXJzIGJ1dCBoYXZlbuKAmXQgc2hhcmVkIHRob3NlIGRldGFpbHMgd2l0aCB1cywgcGxlYXNlIGRvIHNvLiBUaGlzIGNhbiBhZmZlY3QgeW91ciBjdXJyZW50IHllYXLigJlzIGNvbnRyaWJ1dGlvbnMgYW5kIGRlZHVjdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPkNvcnJlY3RseSByZXBvcnRpbmcgeW91ciBTRVAtSVJBIGNvbnRyaWJ1dGlvbnMgaXMgY3J1Y2lhbCBmb3IgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgdGF4IGRlZHVjdGlvbnMgYW5kIGNvbXBseSB3aXRoIElSUyBydWxlcyBhbmQgcmVndWxhdGlvbnMuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBjb21wbGV0aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIGVmZmljaWVudGx5IGFuZCBhY2N1cmF0ZWx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFNJTVBMRSBQbGFuIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgU0lNUExFIFBsYW4gQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPldlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheGVzIGFuZCBub3RlZCB0aGF0IHlvdSBoYXZlIGNvbnRyaWJ1dGVkIHRvIGEgU0lNUExFIElSQSBwbGFuIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsIHRoaXMgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IGZpbGluZywgd2UgcmVxdWlyZSBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uIDwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5Ub3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFNJTVBMRSBJUkEgdGhpcyB0YXggeWVhcjo8L3N0cm9uZz4gUGxlYXNlIHNwZWNpZnkgdGhlIHRvdGFsIHN1bSBvZiB5b3VyIGNvbnRyaWJ1dGlvbnMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udHJpYnV0aW9uIGRhdGVzOjwvc3Ryb25nPiBMaXN0IHRoZSBkYXRlcyBvbiB3aGljaCB5b3UgbWFkZSB0aGVzZSBjb250cmlidXRpb25zIHRvIHRoZSBTSU1QTEUgSVJBLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIGNvbnRyaWJ1dGlvbnM6PC9zdHJvbmc+IFRoaXMgY2FuIGluY2x1ZGUgYmFuayBzdGF0ZW1lbnRzIG9yIHRyYW5zYWN0aW9uIGhpc3RvcmllcyBzaG93aW5nIHRoZSBjb250cmlidXRpb25zIHRvIHlvdXIgU0lNUExFIElSQSBhY2NvdW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPklSUyBGb3JtIDEwNDAgU2NoZWR1bGUgQzo8L3N0cm9uZz4gQXMgYSBzZWxmLWVtcGxveWVkIGluZGl2aWR1YWwsIHlvdXIgdGF4IHJldHVybiBzaG91bGQgaW5jbHVkZSBhIFNjaGVkdWxlIEMgc2hvd2luZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkZXRlcm1pbmluZyB5b3VyIG5ldCBlYXJuaW5ncyBhbmQgdGhlIGNvbnRyaWJ1dGlvbiBsaW1pdHMgZm9yIHlvdXIgU0lNUExFIElSQS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5FbXBsb3llciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKEVJTikgb2YgdGhlIFNJTVBMRSBJUkEgcGxhbjo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcHJvdmlkZSB0aGUgRUlOIGZvciB5b3VyIFNJTVBMRSBJUkEuIFRoaXMgaXMgbm90IHJlcXVpcmVkIGlmIHlvdSBhcmUgdGhlIHNvbGUgY29udHJpYnV0b3IgYW5kIGRvIG5vdCBoYXZlIGFuIEVJTiBzZXBhcmF0ZSBmcm9tIHlvdXIgU29jaWFsIFNlY3VyaXR5IE51bWJlci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IGxhd3MgYW5kIGFjY3VyYXRlbHkgcmVwb3J0aW5nIHlvdXIgcmV0aXJlbWVudCBjb250cmlidXRpb25zLiBZb3VyIHByb21wdG5lc3MgaW4gcHJvdmlkaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBoZWxwIGF2b2lkIGRlbGF5cyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy4gV2UncmUgaGVyZSB0byBoZWxwITwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIFF1YWxpZmllZCBQbGFuIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNlbGYgRW1wbG95ZWQgUXVhbGlmaWVkIFBsYW4gQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyB5b3VyIHRheCByZXR1cm5zIGFuZCBuZWVkIGFkZGl0aW9uYWwgZGV0YWlscyByZWdhcmRpbmcgeW91ciBzZWxmLWVtcGxveWVkIHF1YWxpZmllZCBwbGFuIGNvbnRyaWJ1dGlvbnMuIFlvdXIgcmVzcG9uc2UgdG8gb3VyIHF1ZXN0aW9uIGFib3V0IG1ha2luZyBjb250cmlidXRpb25zIHRvIGEgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiBkdXJpbmcgdGhpcyB0YXggeWVhciBuZWNlc3NpdGF0ZXMgZnVydGhlciBpbmZvcm1hdGlvbiB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgcG90ZW50aWFsIHRheCBiZW5lZml0cyBvciBvYmxpZ2F0aW9ucy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxiPkNvbmZpcm1hdGlvbiBvZiBDb250cmlidXRpb24gVHlwZTo8L2I+IENsYXJpZnkgdGhlIHR5cGUgb2YgcXVhbGlmaWVkIHJldGlyZW1lbnQgcGxhbiB5b3UgY29udHJpYnV0ZWQgdG8gKGUuZy4sIFNvbG8gNDAxKGspLCBTRVAgSVJBLCBTSU1QTEUgSVJBKS48L2xpPlxuICAgIDxsaT48Yj5Ub3RhbCBBbW91bnQgQ29udHJpYnV0ZWQ6PC9iPiBTcGVjaWZ5IHRoZSB0b3RhbCBkb2xsYXIgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBwbGFuIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICA8bGk+PGI+Q29udHJpYnV0aW9uIERhdGVzOjwvYj4gTGlzdCB0aGUgZGF0ZXMgb24gd2hpY2ggY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cbiAgICA8bGk+PGI+UGxhbiBBZG1pbmlzdHJhdG9yOjwvYj4gUHJvdmlkZSB0aGUgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBvZiB0aGUgcGxhbidzIGFkbWluaXN0cmF0b3IsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICA8bGk+PGI+UHJvb2Ygb2YgQ29udHJpYnV0aW9uczo8L2I+IEZvcndhcmQgYW55IHJlY2VpcHRzLCBzdGF0ZW1lbnRzLCBvciBvdGhlciBkb2N1bWVudHMgdGhhdCBjYW4gdmVyaWZ5IHRoZSBjb250cmlidXRpb25zIHlvdSBtYWRlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIHRoYXQgeW91IHJlY2VpdmUgdGhlIHByb3BlciB0YXggdHJlYXRtZW50IGZvciB0aGVzZSBjb250cmlidXRpb25zLiBGYWlsdXJlIHRvIGFjY3VyYXRlbHkgcmVwb3J0IHJldGlyZW1lbnQgcGxhbiBjb250cmlidXRpb25zIGNhbiByZXN1bHQgaW4gZGlzY3JlcGFuY2llcyB3aXRoIHRoZSBJUlMgYW5kIHBvdGVudGlhbGx5IGFmZmVjdCB5b3VyIHRheCBsaWFiaWxpdHkgb3IgcmVmdW5kLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBxdWVzdGlvbnMgb3IgcmVxdWlyZSBhc3Npc3RhbmNlIGluIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3Qgd2lsbCBoZWxwIHVzIHRvIG1vcmUgZWZmaWNpZW50bHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24gc2VydmljZXMuIFRoYW5rIHlvdSBmb3IgeW91ciBjb29wZXJhdGlvbiBhbmQgdHJ1c3QgaW4gb3VyIHNlcnZpY2VzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJTZWxmIEVtcGxveWVkIEhlYWx0aCBJbnN1cmFuY2UgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiU2VsZiBFbXBsb3llZCBIZWFsdGggSW5zdXJhbmNlIERlZHVjdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuIGFuZCBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgcGF5aW5nIGZvciBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFzIGEgc2VsZi1lbXBsb3llZCBpbmRpdmlkdWFsLiBUbyBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMgZm9yIHlvdXIgaGVhbHRoIGluc3VyYW5jZSBjb3N0cywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBsaXN0IG9mIDxzdHJvbmc+YWxsIGhlYWx0aCBpbnN1cmFuY2UgcHJlbWl1bXM8L3N0cm9uZz4gcGFpZCBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgbWVkaWNhbCwgZGVudGFsLCBhbmQgbG9uZy10ZXJtIGNhcmUgaW5zdXJhbmNlLiBUaGlzIHNob3VsZCBjb3ZlcjpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50cyBwYWlkIGZvciB5b3Vyc2VsZjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkFtb3VudHMgcGFpZCBmb3IgeW91ciBzcG91c2U8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5BbW91bnRzIHBhaWQgZm9yIHlvdXIgZGVwZW5kZW50czwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgcGF5bWVudCBmb3IgdGhlc2UgcHJlbWl1bXMsIHN1Y2ggYXM6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50czwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkluc3VyYW5jZSBwYXltZW50IHJlY2VpcHRzPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Q2FuY2VsbGVkIGNoZWNrczwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBjb25maXJtaW5nIHRoZSBpbnN1cmFuY2UgY292ZXJhZ2UsIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+SW5zdXJhbmNlIHBvbGljeSBzdGF0ZW1lbnRzPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Q292ZXJhZ2Ugc3VtbWFyaWVzPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT5Db25maXJtYXRpb24gdGhhdCB0aGUgaW5zdXJhbmNlIHBsYW4gaXMgZXN0YWJsaXNoZWQgdW5kZXIgeW91ciBidXNpbmVzcyAoZm9yIHNlbGYtZW1wbG95ZWQgaW5kaXZpZHVhbHMpLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGluZm9ybWF0aW9uIGlzIHZpdGFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIHlvdXIgZGVkdWN0aWJsZSBoZWFsdGggaW5zdXJhbmNlIHByZW1pdW1zIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB5b3VyIHRheCByZXR1cm4gaXMgY29tcGxldGVkIGluIGEgdGltZWx5IG1hbm5lci48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCBpcyByZXF1aXJlZCwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRWFybHkgU2F2aW5ncyBXaXRoZHJhd2FsIFBlbmFsdHlcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFYXJseSBTYXZpbmdzIFdpdGhkcmF3YWwgUGVuYWx0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IGluY3VycmVkIHBlbmFsdGllcyBkdWUgdG8gZWFybHkgd2l0aGRyYXdhbHMgZnJvbSBzYXZpbmdzIGFjY291bnRzIGR1cmluZyB0aGlzIHRheCB5ZWFyLiBUbyBhc3Npc3QgeW91IGVmZmljaWVudGx5IGFuZCBlbnN1cmUgYWNjdXJhdGUgdGF4IGZpbGluZywgd2Uga2luZGx5IGFzayB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSB0b3RhbCBhbW91bnQgb2YgcGVuYWx0aWVzPC9zdHJvbmc+IGluY3VycmVkIGZyb20gZWFybHkgd2l0aGRyYXdhbHMuIFRoaXMgaW5jbHVkZXMgcGVuYWx0aWVzIGZyb20gY2VydGlmaWNhdGVzIG9mIGRlcG9zaXQgb3Igb3RoZXIgdGltZS1iYXNlZCBzYXZpbmdzIGFjY291bnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRldGFpbGVkIHN0YXRlbWVudHM8L3N0cm9uZz4gZnJvbSB5b3VyIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiBmb3IgZWFjaCBpbnN0YW5jZSBvZiBlYXJseSB3aXRoZHJhd2FsLiBUaGVzZSBzdGF0ZW1lbnRzIHNob3VsZCBpbmNsdWRlOlxuICAgICAgICAgICAgPHVsPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgZGF0ZSBvZiB3aXRoZHJhd2FsPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+VGhlIGFtb3VudCB3aXRoZHJhd24gZWFybHk8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5UaGUgcGVuYWx0eSBjaGFyZ2VkPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlRoZSBwdXJwb3NlIG9mIGVhY2ggd2l0aGRyYXdhbDwvc3Ryb25nPiwgaWYgYXZhaWxhYmxlLiBDZXJ0YWluIHNpdHVhdGlvbnMgbWF5IHByb3ZpZGUgZXhjZXB0aW9ucyB0byBwZW5hbHRpZXMgb24geW91ciB0YXggcmV0dXJuLjwvbGk+XG4gICAgICAgIDxsaT5BbnkgPHN0cm9uZz5jb3JyZXNwb25kZW5jZSBvciBkb2N1bWVudGF0aW9uPC9zdHJvbmc+IGZyb20gdGhlIGZpbmFuY2lhbCBpbnN0aXR1dGlvbiByZWdhcmRpbmcgdGhlc2UgcGVuYWx0aWVzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGlzIGNydWNpYWwgdG8gYWNjdXJhdGVseSBhc3Nlc3MgcG9zc2libGUgaW1wYWN0cyBvbiB5b3VyIHRheCBmaWxpbmcgYW5kIGV4cGxvcmUgYW55IG9wcG9ydHVuaXRpZXMgdG8gbWluaW1pemUgeW91ciB0YXggbGlhYmlsaXR5LjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGlzIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGVzZSBkZXRhaWxzLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFsaW1vbnkgUGFpZFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFsaW1vbnkgUGFpZFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGZpbmFuY2lhbCBhY3Rpdml0aWVzIG92ZXIgdGhlIHBhc3QgdGF4IHllYXIuIEFzIHlvdSBpbmRpY2F0ZWQgdGhhdCB5b3UgaGF2ZSBtYWRlIGFsaW1vbnkgcGF5bWVudHMgdW5kZXIgYSBkaXZvcmNlIG9yIHNlcGFyYXRpb24gYWdyZWVtZW50LCB3ZSByZXF1aXJlIHNvbWUgYWRkaXRpb25hbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm4uIFRoZSBkb2N1bWVudGF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIHRheCByZWd1bGF0aW9ucyBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnlpbmcgYWxsb3dhYmxlIGRlZHVjdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBwYXltZW50cy48L3A+IFxuICAgIDxwPjxzdHJvbmc+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIHJlbGF0ZWQgdG8geW91ciBhbGltb255IHBheW1lbnRzOjwvc3Ryb25nPjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5Db3B5IG9mIHlvdXIgc2lnbmVkIGRpdm9yY2Ugb3Igc2VwYXJhdGlvbiBhZ3JlZW1lbnQgdGhhdCBzdGF0ZXMgdGhlIGFtb3VudCBvZiBhbGltb255IHRvIGJlIHBhaWQgYW5kIHRoZSB0aW1lbGluZXMuIFBsZWFzZSBlbnN1cmUgdGhpcyBkb2N1bWVudCBoaWdobGlnaHRzIHRoZSBzZWN0aW9ucyByZWxldmFudCB0byBhbGltb255IG9ibGlnYXRpb25zLjwvbGk+XG4gICAgICAgIDxsaT5EZXRhaWxlZCByZWNvcmQgb2YgYWxsIGFsaW1vbnkgcGF5bWVudHMgbWFkZSBkdXJpbmcgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmc6XG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPkRhdGUgb2YgZWFjaCBwYXltZW50PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW1vdW50IG9mIGVhY2ggcGF5bWVudDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPk1ldGhvZCBvZiBwYXltZW50IChlLmcuLCBjaGVjaywgYmFuayB0cmFuc2Zlcik8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5OYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIG9mIHRoZSByZWNpcGllbnQ8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGFzIHByb29mIG9mIHRoZSBhbGltb255IHBheW1lbnRzIG1hZGUuPC9saT5cbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSBkb2N1bWVudGF0aW9uIG9yIGNvcnJlc3BvbmRlbmNlIHRoYXQgaW5kaWNhdGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIG9yaWdpbmFsIGFncmVlbWVudCBhZmZlY3RpbmcgYWxpbW9ueSBwYXltZW50cyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGlzIGRvY3VtZW50YXRpb24gd2lsbCBoZWxwIGVuc3VyZSB0aGF0IHlvdXIgdGF4IHJldHVybiByZWZsZWN0cyBhbGwgcmVsZXZhbnQgZmluYW5jaWFsIGFjdGl2aXRpZXMgYW5kIGFzc2lzdHMgaW4gYWNjdXJhdGVseSBkZXRlcm1pbmluZyBhbnkgdGF4IGxpYWJpbGl0aWVzIG9yIGRlZHVjdGlvbnMuIFlvdXIgcHJvbXB0IHJlc3BvbnNlIHdpdGggdGhlc2UgZGV0YWlscyB3aWxsIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQgYW5kIHdpbGwgZXhwZWRpdGUgdGhlIGNvbXBsZXRpb24gb2YgeW91ciB0YXggcHJlcGFyYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgaWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBpZiB5b3UgbmVlZCBmdXJ0aGVyIGd1aWRhbmNlIG9uIGdhdGhlcmluZyB0aGVzZSBkb2N1bWVudHMuIFdlIGFyZSBoZXJlIHRvIGFzc2lzdCB5b3UgdGhyb3VnaCBldmVyeSBzdGVwIG9mIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiVHJhZGl0aW9uYWwgSVJBIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlRyYWRpdGlvbmFsIElSQSBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybi4gSXQgaGFzIGNvbWUgdG8gb3VyIGF0dGVudGlvbiB0aGF0IGR1cmluZyB0aGlzIHRheCB5ZWFyLCB5b3UgaGF2ZSBjb250cmlidXRlZCB0byBhIFRyYWRpdGlvbmFsIElSQSAoSW5kaXZpZHVhbCBSZXRpcmVtZW50IEFjY291bnQpLiBUbyBhY2N1cmF0ZWx5IGNhcHR1cmUgdGhpcyBpbiB5b3VyIHRheCBmaWxpbmcgYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgZGVkdWN0aW9uLCB3ZSB3aWxsIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICA8bGk+UHJvb2Ygb2YgY29udHJpYnV0aW9uIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgKHN1Y2ggYXMgc3RhdGVtZW50cyBvciByZWNlaXB0cykuPC9saT5cbiAgICAgIDxsaT5Zb3VyIHllYXItZW5kIElSQSBzdGF0ZW1lbnQuPC9saT5cbiAgICAgIDxsaT5EZXRhaWxzIG9mIGFueSBwcmV2aW91cyBub24tZGVkdWN0aWJsZSBjb250cmlidXRpb25zIHRvIHlvdXIgSVJBIChpZiBhcHBsaWNhYmxlKS48L2xpPlxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSB3aXRoZHJhd2FscyBvciBkaXN0cmlidXRpb25zIHRha2VuIGR1cmluZyB0aGUgeWVhci48L2xpPlxuICAgICAgPGxpPllvdXIgZmlsaW5nIHN0YXR1cyBhbmQgYW55IGluZm9ybWF0aW9uIG9uIGEgc3BvdXNlJ3MgSVJBIGNvbnRyaWJ1dGlvbnMgaWYgeW91IGFyZSBtYXJyaWVkLjwvbGk+XG4gICAgICA8bGk+RGV0YWlscyBvZiB5b3VyIGVhcm5lZCBpbmNvbWUgZm9yIHRoZSB0YXggeWVhci48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGVuc3VyZSB0aGF0IHdlIGNhbiBhY2N1cmF0ZWx5IHJlcHJlc2VudCB5b3VyIElSQSBjb250cmlidXRpb25zIGFuZCBvcHRpbWl6ZSB5b3VyIGRlZHVjdGlvbnMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlN0dWRlbnQgTG9hbiBJbnRlcmVzdCBEZWR1Y3Rpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJTdHVkZW50IExvYW4gSW50ZXJlc3QgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciB5b3VyIHJlY2VudCBjb25maXJtYXRpb24gcmVnYXJkaW5nIHRoZSBwYXltZW50IG9mIHN0dWRlbnQgbG9hbiBpbnRlcmVzdCBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcm9jZXNzIHRoaXMgc2VnbWVudCBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGVuc3VyZSB5b3UgYmVuZWZpdCBmcm9tIGFueSBwb3RlbnRpYWwgU3R1ZGVudCBMb2FuIEludGVyZXN0IERlZHVjdGlvbiwgd2UgbmVlZCB5b3UgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5OC1FOjwvc3Ryb25nPiBUaGlzIGlzIGEgU3R1ZGVudCBMb2FuIEludGVyZXN0IFN0YXRlbWVudCBpc3N1ZWQgYnkgeW91ciBsb2FuIHNlcnZpY2VyLiBJZiB5b3UndmUgcGFpZCAkNjAwIG9yIG1vcmUgaW4gaW50ZXJlc3QsIHlvdSBzaG91bGQgYXV0b21hdGljYWxseSByZWNlaXZlIGl0LiBQbGVhc2Ugc2NhbiBhbmQgc2VuZCBpdCB0byB1cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Mb2FuIFN0YXRlbWVudHM6PC9zdHJvbmc+IElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBGb3JtIDEwOTgtRSBvciBwYWlkIGxlc3MgdGhhbiAkNjAwIGluIGludGVyZXN0LCBwbGVhc2UgcHJvdmlkZSBkZXRhaWxlZCBsb2FuIHN0YXRlbWVudHMgaW5kaWNhdGluZyB0aGUgaW50ZXJlc3QgcGFpZCBvdmVyIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Cb3Jyb3dlcidzIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBTb2NpYWwgU2VjdXJpdHkgTnVtYmVycyBhbmQgZnVsbCBuYW1lcyBvZiBhbnkgaW5kaXZpZHVhbHMgZm9yIHdob20gdGhlIGxvYW4gaW50ZXJlc3Qgd2FzIHBhaWQsIGluY2x1ZGluZyB5b3Vyc2VsZiwgeW91ciBzcG91c2UsIG9yIGRlcGVuZGVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UGF5bWVudHMgb24gU29tZW9uZSBFbHNlJ3MgQmVoYWxmOjwvc3Ryb25nPiBJZiB5b3UncmUgbm90IGxlZ2FsbHkgb2JsaWdhdGVkIHRvIG1ha2UgaW50ZXJlc3QgcGF5bWVudHMgb24gdGhlIGxvYW4gYnV0IGhhdmUgZG9uZSBzbyBhbnl3YXksIHBsZWFzZSBwcm92aWRlIGRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyByZWZsZWN0aW5nIHRoaXMgcGF5bWVudC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBkZWR1Y3Rpb24gY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgdGF4IGFkdmFudGFnZXMsIGFuZCB3ZSdyZSBoZXJlIHRvIGhlbHAgeW91IG1heGltaXplIHlvdXIgYmVuZWZpdHMuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb2FjdGl2ZSBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIGFzIHdlIHN0cml2ZSB0byBzZXJ2ZSB5b3UgYmV0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBcmNoZXIgTVNBIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFyY2hlciBNU0EgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2Ugbm90ZWQgeW91ciByZXNwb25zZSBpbmRpY2F0aW5nIGNvbnRyaWJ1dGlvbnMgdG8gYW4gQXJjaGVyIE1lZGljYWwgU2F2aW5ncyBBY2NvdW50IChNU0EpIHdpdGhpbiB0aGlzIHRheCB5ZWFyLCB1bmRlciBhIGhpZ2gtZGVkdWN0aWJsZSBoZWFsdGggcGxhbi4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBjb250cmlidXRpb25zIGluIHlvdXIgdGF4IHJldHVybiwgYW5kIHRvIG1heGltaXplIHlvdXIgcG90ZW50aWFsIGRlZHVjdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgc3BlY2lmaWNzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gNTQ5OC1TQTo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgYSBjb3B5IG9mIEZvcm0gNTQ5OC1TQSwgaWYgcmVjZWl2ZWQsIHdoaWNoIHNob3dzIHRoZSBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIEFyY2hlciBNU0EgdGhpcyB0YXggeWVhci48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5CYW5rIG9yIEZpbmFuY2lhbCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBJZiB5b3UgaGF2ZW4ndCByZWNlaXZlZCBGb3JtIDU0OTgtU0EsIGJhbmsgb3IgZmluYW5jaWFsIGluc3RpdHV0aW9uIHN0YXRlbWVudHMgc2hvd2luZyB5b3VyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIE1TQSBhcmUgcmVxdWlyZWQuIEVuc3VyZSB0aGVzZSBjbGVhcmx5IGhpZ2hsaWdodCB0aGUgY29udHJpYnV0aW9uIGFtb3VudHMgYW5kIGRhdGVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEhpZ2gtRGVkdWN0aWJsZSBIZWFsdGggUGxhbjo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiB0aGF0IGV2aWRlbmNlcyB5b3UgYXJlIGNvdmVyZWQgdW5kZXIgYSBoaWdoLWRlZHVjdGlibGUgaGVhbHRoIHBsYW4uIFRoaXMgY291bGQgaW5jbHVkZSBpbnN1cmFuY2Ugc3RhdGVtZW50cyBvciBwb2xpY3kgZG9jdW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIGFuZCBBY2NvdW50IEluZm9ybWF0aW9uOjwvc3Ryb25nPiBDb25maXJtIHRoZSBhY2NvdW50IGhvbGRlcidzIGZ1bGwgbmFtZSBhbmQgU29jaWFsIFNlY3VyaXR5IE51bWJlciwgYWxvbmdzaWRlIHRoZSBBcmNoZXIgTVNBIGFjY291bnQgbnVtYmVyLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UbyBmYWNpbGl0YXRlIGEgc21vb3RoIGRlZHVjdGlvbiBwcm9jZXNzIGFuZCBhZGhlcmUgdG8gSVJTIGd1aWRlbGluZXMsIGtpbmRseSBzdWJtaXQgdGhlIG91dGxpbmVkIGRvY3VtZW50cyBhcyBzb29uIGFzIHBvc3NpYmxlPC9zdHJvbmc+LiBFYXJseSBzdWJtaXNzaW9uIGlzIGdyZWF0bHkgYXBwcmVjaWF0ZWQgdG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHRheCBwcmVwYXJhdGlvbiBzZXJ2aWNlLjwvcD5cbiAgICA8cD5Zb3VyIHByb21wdCByZXNwb25zZSB0byB0aGVzZSByZXF1aXJlbWVudHMgd2lsbCBkaXJlY3RseSBpbXBhY3QgdGhlIGVmZmljaWVuY3kgYW5kIGFjY3VyYWN5IG9mIHlvdXIgdGF4IHJldHVybiBwcm9jZXNzaW5nLiBTaG91bGQgeW91IHJlcXVpcmUgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIGRvY3VtZW50YXRpb24sIHBsZWFzZSBmZWVsIGZyZWUgdG8gcmVhY2ggb3V0LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJPdGhlciBXcml0ZS1JbiBBZGp1c3RtZW50c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIk90aGVyIFdyaXRlLUluIEFkanVzdG1lbnRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIGFkZGl0aW9uYWwgZXhwZW5zZXMgb3IgYWRqdXN0bWVudHMgdGhhdCBjb3VsZCBpbXBhY3QgeW91ciB0YXhhYmxlIGluY29tZSBmb3IgdGhlIGN1cnJlbnQgdGF4IHllYXIuIFRvIGVuc3VyZSB3ZSBmdWxseSBsZXZlcmFnZSBhbGwgcG9zc2libGUgZGVkdWN0aW9ucyBhbmQgYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IHJldHVybnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGVzZSBpdGVtcy48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGZvciBlYWNoIHNwZWNpZmllZCBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudDo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXNjcmlwdGlvbiBvZiB0aGUgRXhwZW5zZSBvciBBZGp1c3RtZW50Ojwvc3Ryb25nPiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggaXRlbSB5b3UgYmVsaWV2ZSBzaG91bGQgYmUgY29uc2lkZXJlZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5BbW91bnQ6PC9zdHJvbmc+IFRoZSB0b3RhbCBhbW91bnQgcGFpZCBvciBpbmN1cnJlZCBmb3IgZWFjaCBvZiB0aGVzZSBleHBlbnNlcyBvciBhZGp1c3RtZW50cy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb2N1bWVudGF0aW9uOjwvc3Ryb25nPiBDb3BpZXMgb2YgcmVjZWlwdHMsIGludm9pY2VzLCBsZWdhbCBkb2N1bWVudHMsIG9yIG90aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2UgdGhhdCB2YWxpZGF0ZSB0aGUgZXhwZW5zZSBvciBhZGp1c3RtZW50LiBUaGlzIGRvY3VtZW50YXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZSByZXBvcnRpbmcgYW5kIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVxdWlyZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgb2YgUGF5bWVudCBvciBJbmN1cnJlbmNlOjwvc3Ryb25nPiBUaGUgZGF0ZShzKSBvbiB3aGljaCB0aGUgZXhwZW5zZSB3YXMgcGFpZCBvciB0aGUgYWRqdXN0bWVudCBvY2N1cnJlZC4gVGhpcyBpcyBjcml0aWNhbCB0byBkZXRlcm1pbmUgdGhlIHRheCB5ZWFyIGluIHdoaWNoIHRoZSBkZWR1Y3Rpb24gb3IgYWRqdXN0bWVudCBhcHBsaWVzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFkZGl0aW9uYWwgRXhwbGFuYXRpb246PC9zdHJvbmc+IEFueSBvdGhlciByZWxldmFudCBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGhlbHAgdXMgdW5kZXJzdGFuZCBob3cgdGhlIGV4cGVuc2Ugb3IgYWRqdXN0bWVudCBpcyBqdXN0aWZpZWQgdW5kZXIgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGF0IGFsbCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGFyZSBwcm92aWRlZCBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIGVmZmljaWVudCBwcmVwYXJhdGlvbiBvZiB5b3VyIHRheCByZXR1cm5zLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IGNvbnN0aXR1dGVzIGFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24sIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGxvb2sgZm9yd2FyZCB0byBhc3Npc3RpbmcgeW91IGZ1cnRoZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIk1lZGljYWwgYW5kIERlbnRhbCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3Ugb3IgeW91ciBkZXBlbmRlbnRzIGhhdmUgaW5jdXJyZWQgc2lnbmlmaWNhbnQgbWVkaWNhbCBvciBkZW50YWwgZXhwZW5zZXMgZHVyaW5nIHRoaXMgdGF4IHllYXIgdGhhdCB3ZXJlIG5vdCByZWltYnVyc2VkIGJ5IGluc3VyYW5jZSBvciBvdGhlciBoZWFsdGggcGxhbnMuIFRvIGVuc3VyZSB3ZSBjYW4gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcyBpbiB5b3VyIHRheCBwcmVwYXJhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+RGV0YWlsZWQgcmVjZWlwdHMgb3Igc3RhdGVtZW50cyBmb3IgYWxsIG1lZGljYWwgYW5kIGRlbnRhbCBleHBlbnNlcyBpbmN1cnJlZCBmb3IgeW91cnNlbGYgYW5kIGFueSBkZXBlbmRlbnRzLiBUaGlzIGluY2x1ZGVzIHBheW1lbnRzIGZvcjpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+RG9jdG9ycyBhbmQgZGVudGlzdHM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5TdXJnZW9uczwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPlByZXNjcmlwdGlvbnM8L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5NZWRpY2FsIGVxdWlwbWVudCBkZWVtZWQgbmVjZXNzYXJ5PC9saT5cbiAgICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIGhlYWx0aC1yZWxhdGVkIGV4cGVuc2VzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYmUgcmVsZXZhbnQ8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBzaG93aW5nIGFueSByZWltYnVyc2VtZW50cyByZWNlaXZlZCBmcm9tIGluc3VyYW5jZSBvciBoZWFsdGggcGxhbnMgZm9yIHRoZXNlIGV4cGVuc2VzLjwvbGk+XG4gICAgICAgIDxsaT5BIGxpc3Qgb2YgZGVwZW5kZW50cyBmb3Igd2hvbSB0aGVzZSBtZWRpY2FsIGFuZCBkZW50YWwgZXhwZW5zZXMgd2VyZSBpbmN1cnJlZCwgYWxvbmcgd2l0aCB0aGVpciByZWxhdGlvbnNoaXAgdG8geW91LjwvbGk+XG4gICAgICAgIDxsaT5JZiBhcHBsaWNhYmxlLCByZWNvcmRzIG9mIHRyYXZlbCBleHBlbnNlcyByZWxhdGVkIHRvIG1lZGljYWwgY2FyZSwgaW5jbHVkaW5nIG1pbGVhZ2UsIHBhcmtpbmcsIGFuZCB0b2xscy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+SGF2aW5nIHRoZXNlIGRvY3VtZW50cyByZWFkeSBhbmQgYWNjdXJhdGVseSBkb2N1bWVudGVkIHdpbGwgaGVscCB1cyBlbnN1cmUgdGhhdCB3ZSBjYW4gbWF4aW1pemUgeW91ciB0YXggZGVkdWN0aW9ucyBvciBjcmVkaXRzIHJlbGF0ZWQgdG8gdGhlc2UgZXhwZW5zZXMuIFBsZWFzZSBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSwgb3IgY29udGFjdCB1cyB0byBzY2hlZHVsZSBhIG1lZXRpbmcgdG8gZGlzY3VzcyB0aGVzZSBpbiBmdXJ0aGVyIGRldGFpbC48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiU0FMVCBFeHBlbnNlc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlNBTFQgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgbmVlZCB0byBjb21waWxlIGFjY3VyYXRlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIFN0YXRlIGFuZCBMb2NhbCBUYXhlcyAoU0FMVCkgZXhwZW5zZXMuIEFjY29yZGluZyB0byB5b3VyIHJlY2VudCBzdWJtaXNzaW9uLCB5b3UgaW5kaWNhdGVkIGhhdmluZyBwYWlkIHNpZ25pZmljYW50IGFtb3VudHMgaW4gdGhlc2UgdGF4ZXMgb3ZlciB0aGUgbGFzdCB0YXggeWVhci4gVG8gZW5zdXJlIHdlIGNhbiBwcm92aWRlIHlvdSB3aXRoIHRoZSBiZXN0IHBvc3NpYmxlIHNlcnZpY2UgYW5kIG1heGltaXplIHlvdXIgZGVkdWN0aW9ucywgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxlZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxiPlN1bW1hcnkgb2YgU3RhdGUgYW5kIExvY2FsIEluY29tZSBUYXhlczo8L2I+IFxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlctMiBmb3JtcyBzaG93aW5nIHN0YXRlIGFuZCBsb2NhbCBpbmNvbWUgdGF4ZXMgd2l0aGhlbGQuPC9saT5cbiAgICAgICAgICA8bGk+RXN0aW1hdGVkIHRheCBwYXltZW50IHJlY2VpcHRzIHRvIHN0YXRlIGFuZCBsb2NhbCBnb3Zlcm5tZW50cywgaWYgYXBwbGljYWJsZS48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT48Yj5Qcm9wZXJ0eSBUYXhlczo8L2I+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGk+QW5udWFsIHByb3BlcnR5IHRheCBzdGF0ZW1lbnRzIGZvciB5b3VyIHByaW1hcnkgcmVzaWRlbmNlLCB2YWNhdGlvbiBob21lcywgYW5kIGFueSBvdGhlciByZWFsIGVzdGF0ZSBvd25lZC48L2xpPlxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBkb2N1bWVudHMgc2hvd2luZyBwYWlkIHByb3BlcnR5IHRheCBhbW91bnRzLjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPjxiPlNhbGVzIFRheGVzOjwvYj4gKElmIHlvdSBlbGVjdGVkIHRvIGRlZHVjdCBzYWxlcyB0YXhlcyBpbnN0ZWFkIG9mIGluY29tZSB0YXhlcylcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5EZXRhaWxlZCByZWNlaXB0cyBvZiBzaWduaWZpY2FudCBwdXJjaGFzZXMgKGUuZy4sIHZlaGljbGUsIGJvYXQsIGhvbWUgcmVub3ZhdGlvbiBtYXRlcmlhbHMpLjwvbGk+XG4gICAgICAgICAgPGxpPkFueSBkb2N1bWVudGF0aW9uIG9yIHN1bW1hcnkgb2YgdG90YWwgc2FsZXMgdGF4ZXMgcGFpZCBpZiB5b3Uga2VwdCBhIGRldGFpbGVkIHJlY29yZC48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBkYXRlZCB3aXRoaW4gdGhlIGxhc3QgdGF4IHllYXIuIFByb3ZpZGluZyB0aGlzIGluZm9ybWF0aW9uIGFzIHNvb24gYXMgcG9zc2libGUgd2lsbCBleHBlZGl0ZSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIGhlbHAgdXMgaWRlbnRpZnkgZWxpZ2libGUgZGVkdWN0aW9ucyB0byBvcHRpbWl6ZSB5b3VyIHRheCBzaXR1YXRpb24uPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZWR1Y3RpYmxlIEludGVyZXN0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRGVkdWN0aWJsZSBJbnRlcmVzdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5lZWQgZnVydGhlciBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGRlZHVjdGlibGUgaW50ZXJlc3QgZXhwZW5zZXMuIFRoaXMgaXMgaW4gcmVsYXRpb24gdG8gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlZCBpbmRpY2F0aW5nIHRoYXQgeW91IGhhdmUgaW5jdXJyZWQgbW9ydGdhZ2UgaW50ZXJlc3QsIGxhdGUgZmVlcywgb3IgcG9pbnRzIG9uIGEgaG9tZSBsb2FuIHRoaXMgeWVhciBmb3IgZWl0aGVyIHlvdXIgcHJpbWFyeSByZXNpZGVuY2Ugb3IgYSBzZWNvbmQgaG9tZS4gVGhlc2UgZXhwZW5zZXMgbWF5IHNpZ25pZmljYW50bHkgcmVkdWNlIHlvdXIgdGF4YWJsZSBpbmNvbWUsIGVuc3VyaW5nIGEgZmF2b3JhYmxlIHRheCBvdXRjb21lIGZvciB5b3UuPC9wPlxuXG4gICAgPGgyPlJlcXVpcmVkIERvY3VtZW50YXRpb248L2gyPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICBcbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+TW9ydGdhZ2UgSW50ZXJlc3QgU3RhdGVtZW50cyAoRm9ybSAxMDk4KTwvc3Ryb25nPjogRm9yIGVhY2ggcHJvcGVydHkgeW91IG93bi4gVGhpcyBpbmNsdWRlcyB5b3VyIHByaW1hcnkgaG9tZSBhbmQgYW55IHNlY29uZCBob21lcyBvciByZW50YWwgcHJvcGVydGllcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPkhvbWUgRXF1aXR5IExvYW4gSW50ZXJlc3Q8L3N0cm9uZz46IElmIGFwcGxpY2FibGUsIGRvY3VtZW50YXRpb24gZm9yIGludGVyZXN0IHBhaWQgb24gaG9tZSBlcXVpdHkgbG9hbnMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5JbnZlc3RtZW50IEludGVyZXN0IEV4cGVuc2VzPC9zdHJvbmc+OiBJZiB5b3UgaGF2ZSBpbmN1cnJlZCBhbnkgaW52ZXN0bWVudCBpbnRlcmVzdCBleHBlbnNlcywgcGxlYXNlIHByb3ZpZGUgZGV0YWlsZWQgc3RhdGVtZW50cyBvciBhY2NvdW50IHN1bW1hcmllcyBzaG93aW5nIHRoZSBpbnRlcmVzdCBwYWlkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+UG9pbnRzIFBhaWQ8L3N0cm9uZz46IERvY3VtZW50YXRpb24gZGV0YWlsaW5nIHBvaW50cyBwYWlkIGlmIHlvdSBwdXJjaGFzZWQgb3IgcmVmaW5hbmNlZCBhIGhvbWUgdGhpcyB0YXggeWVhci48L2xpPlxuICAgIDxsaT48c3Ryb25nPkxhdGUgUGF5bWVudCBGZWVzPC9zdHJvbmc+IG9uIE1vcnRnYWdlOiBJZiBhbnksIGRvY3VtZW50YXRpb24gb2YgbGF0ZSBwYXltZW50IGZlZXMgYXNzb2NpYXRlZCB3aXRoIHlvdXIgaG9tZSBsb2FuKHMpLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UbyBlbnN1cmUgeW91ciB0YXggcmV0dXJucyBhcmUgcHJlcGFyZWQgYWNjdXJhdGVseSBhbmQgZmlsZWQgb24gdGltZSwgd2Uga2luZGx5IGFzayB0aGF0IHlvdSBzdWJtaXQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLiBJZiB5b3UgZm9yZXNlZSBhbnkgZGVsYXlzIG9yIGhhdmUgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGVzZSBkb2N1bWVudHMsIHBsZWFzZSBjb250YWN0IHVzIGltbWVkaWF0ZWx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXBwcmVjaWF0ZSB0aGUgb3Bwb3J0dW5pdHkgdG8gc2VydmUgeW91IGFuZCBhcmUgaGVyZSB0byBhc3Npc3Qgd2l0aCBhbnkgcXVlc3Rpb25zIG9yIGNvbmNlcm5zIHlvdSBtYXkgaGF2ZS48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQ2hhcml0YWJsZSBDb250cmlidXRpb25zXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgICAgIDxwPkFzIHBhcnQgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMsIHdlIG5vdGVkIHRoYXQgeW91IGhhdmUgbWFkZSBjaGFyaXRhYmxlIGNvbnRyaWJ1dGlvbnMgdGhpcyB5ZWFyLiBUbyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlc2UgY29udHJpYnV0aW9ucyBvbiB5b3VyIHRheCByZXR1cm4sIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIGFwcHJvcHJpYXRlIGRlZHVjdGlvbnMsIHdlIHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5MaXN0IG9mIENoYXJpdGFibGUgT3JnYW5pemF0aW9uczo8L3N0cm9uZz4gTmFtZXMgYW5kIGFkZHJlc3NlcyBvZiB0aGUgb3JnYW5pemF0aW9ucyB0byB3aGljaCB5b3UgaGF2ZSBkb25hdGVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkNvbnRyaWJ1dGlvbiBEYXRlczo8L3N0cm9uZz4gRGF0ZXMgb24gd2hpY2ggZWFjaCBkb25hdGlvbiB3YXMgbWFkZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Eb25hdGlvbiBBbW91bnRzOjwvc3Ryb25nPiBcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGNhc2ggZG9uYXRpb25zLCB0aGUgZXhhY3QgYW1vdW50IGRvbmF0ZWQgdG8gZWFjaCBvcmdhbml6YXRpb24uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+Rm9yIGRvbmF0aW9ucyBvZiBnb29kcywgYW4gZXN0aW1hdGVkIHZhbHVlIG9mIHRoZSBpdGVtcyBkb25hdGVkIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Qcm9vZiBvZiBEb25hdGlvbjo8L3N0cm9uZz4gXG4gICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpPlJlY2VpcHRzIGZvciBjYXNoIGRvbmF0aW9ucy48L2xpPlxuICAgICAgICAgICAgICAgIDxsaT5Gb3IgZG9uYXRpb25zIG9mIGdvb2RzLCBhbnkgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gc3VwcG9ydGluZyB0aGUgdmFsdWF0aW9uIGFuZCBjb25kaXRpb24gb2YgdGhlIGl0ZW1zIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uLjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPkJhbmsgc3RhdGVtZW50cyBvciBjYW5jZWxsZWQgY2hlY2tzIGNhbiBhbHNvIHNlcnZlIGFzIHByb29mIGZvciBjYXNoIGRvbmF0aW9ucywgaWYgcmVjZWlwdHMgYXJlIG5vdCBhdmFpbGFibGUuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gODI4Mzo8L3N0cm9uZz4gSWYgYW55IHNpbmdsZSBkb25hdGlvbiBvZiBnb29kcyBleGNlZWRzICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBjb21wbGV0ZSBTZWN0aW9uIEEgb2YgRm9ybSA4MjgzLiBJZiB0aGUgdG90YWwgdmFsdWUgb2YgZ29vZHMgZG9uYXRlZCBleGNlZWRzICQ1LDAwMCwgYSBxdWFsaWZpZWQgYXBwcmFpc2FsIGlzIHJlcXVpcmVkIGFuZCBzaG91bGQgYmUgcHJvdmlkZWQgYWxvbmcgd2l0aCBTZWN0aW9uIEIgb2YgRm9ybSA4MjgzIGNvbXBsZXRlZC48L2xpPlxuICAgIDwvb2w+XG5cbiAgICA8cD5Db3JyZWN0IGFuZCBjb21wbGV0ZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIGNoYXJpdGFibGUgY29udHJpYnV0aW9ucyBpcyBjcnVjaWFsIHRvIGVuc3VyZSBjb21wbGlhbmNlIHdpdGggSVJTIHJlZ3VsYXRpb25zIGFuZCB0byBtYXhpbWl6ZSB5b3VyIHRheCBiZW5lZml0cy4gUGxlYXNlIGZvcndhcmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UsIGFsbG93aW5nIHVzIHRvIHByb2Nlc3MgeW91ciB0YXggZm9ybXMgYWNjdXJhdGVseSBhbmQgcHJvbXB0bHkuPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGRpcmVjdGx5LjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEb25hdGVkIFByb3BlcnR5XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRG9uYXRlZCBQcm9wZXJ0eVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPlRoYW5rIHlvdSBmb3IgaW5mb3JtaW5nIHVzIGFib3V0IHlvdXIgZG9uYXRlZCBwcm9wZXJ0eSB0aGlzIHRheCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGRvY3VtZW50IGFuZCBjbGFpbSB0aGVzZSBkb25hdGlvbnMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIHByb3BlcnR5IChlLmcuLCBmdXJuaXR1cmUsIGNsb3RoaW5nLCBlbGVjdHJvbmljcykuPC9saT5cbiAgICAgICAgPGxpPk5hbWVzIGFuZCBhZGRyZXNzZXMgb2YgdGhlIG9yZ2FuaXphdGlvbnMgdG8gd2hpY2ggeW91IGRvbmF0ZWQuPC9saT5cbiAgICAgICAgPGxpPlRoZSBkYXRlIG9mIGVhY2ggZG9uYXRpb24uPC9saT5cbiAgICAgICAgPGxpPlRoZSBmYWlyIG1hcmtldCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgYXQgdGhlIHRpbWUgb2YgdGhlIGRvbmF0aW9uLiBJZiBwb3NzaWJsZSwgaW5jbHVkZSBob3cgeW91IGRldGVybWluZWQgdGhpcyB2YWx1ZS48L2xpPlxuICAgICAgICA8bGk+QW55IGFja25vd2xlZGdtZW50IG9yIHJlY2VpcHQgcmVjZWl2ZWQgZnJvbSB0aGUgb3JnYW5pemF0aW9uLiBQbGVhc2UgZW5zdXJlIGl0IGluY2x1ZGVzIHRoZSBvcmdhbml6YXRpb27igJlzIG5hbWUsIGRvbmF0aW9uIGRhdGUsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBkb25hdGVkIGl0ZW1zLjwvbGk+XG4gICAgICAgIDxsaT5JZiBhbnkgc2luZ2xlIGRvbmF0aW9uIGV4Y2VlZGVkICQ1MDAgaW4gdmFsdWUsIHBsZWFzZSBwcm92aWRlIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIHRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgaG93IHRoZSB2YWx1ZSB3YXMgZGV0ZXJtaW5lZC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGdhdGhlciB0aGVzZSBkb2N1bWVudHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSBzbyB3ZSBjYW4gZW5zdXJlIHlvdXIgdGF4IHJldHVybiBhY2N1cmF0ZWx5IHJlZmxlY3RzIHlvdXIgZ2VuZXJvdXMgY29udHJpYnV0aW9ucy4gSWYgeW91IGhhdmUgbXVsdGlwbGUgZG9uYXRpb25zLCBvcmdhbml6aW5nIHRoaXMgaW5mb3JtYXRpb24gY2hyb25vbG9naWNhbGx5IGNhbiBiZSB2ZXJ5IGhlbHBmdWwuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHJlYWNoIG91dC4gV2UgYXJlIGhlcmUgdG8gaGVscCE8L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkRvbmF0ZWQgVmVoaWNsZVwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFwcHJlY2lhdGUgeW91ciBlZmZvcnRzIGluIHN1cHBvcnRpbmcgY2hhcml0YWJsZSBjYXVzZXMgdGhyb3VnaCB5b3VyIGdlbmVyb3VzIHZlaGljbGUgZG9uYXRpb24uIFRvIGFjY3VyYXRlbHkgZG9jdW1lbnQgdGhpcyBkb25hdGlvbiBmb3IgeW91ciB0YXggcmVjb3JkcyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBhcHByb3ByaWF0ZSBkZWR1Y3Rpb24sIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczo8L3A+XG4gICAgPG9sPlxuICAgIDxsaT48c3Ryb25nPkNoYXJpdHkgSW5mb3JtYXRpb246PC9zdHJvbmc+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT5OYW1lIG9mIHRoZSBjaGFyaXR5PC9saT5cbiAgICAgICAgICAgIDxsaT5DaGFyaXR5J3MgdGF4LWV4ZW1wdCBJRCBudW1iZXI8L2xpPlxuICAgICAgICAgICAgPGxpPkFkZHJlc3MgYW5kIHBob25lIG51bWJlciBvZiB0aGUgY2hhcml0eTwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgPC9saT5cbiAgICA8bGk+PHN0cm9uZz5WZWhpY2xlIEluZm9ybWF0aW9uOjwvc3Ryb25nPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+TWFrZSwgbW9kZWwsIGFuZCB5ZWFyIG9mIHRoZSBkb25hdGVkIHZlaGljbGU8L2xpPlxuICAgICAgICAgICAgPGxpPlZJTiAoVmVoaWNsZSBJZGVudGlmaWNhdGlvbiBOdW1iZXIpPC9saT5cbiAgICAgICAgICAgIDxsaT5BIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSB2ZWhpY2xlJ3MgY29uZGl0aW9uIGF0IHRoZSB0aW1lIG9mIGRvbmF0aW9uPC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDxsaT48c3Ryb25nPkRvbmF0aW9uIERvY3VtZW50YXRpb246PC9zdHJvbmc+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICAgIDxsaT5BIGNvcHkgb2YgdGhlIGRvbmF0aW9uIHJlY2VpcHQgcHJvdmlkZWQgYnkgdGhlIGNoYXJpdHk8L2xpPlxuICAgICAgICAgICAgPGxpPkZvcm0gMTA5OC1DIChDb250cmlidXRpb25zIG9mIE1vdG9yIFZlaGljbGVzLCBCb2F0cywgYW5kIEFpcnBsYW5lcykgaWYgcmVjZWl2ZWQ8L2xpPlxuICAgICAgICAgICAgPGxpPkFueSB3cml0dGVuIGFja25vd2xlZGdtZW50cyBvciBjb21tdW5pY2F0aW9ucyBmcm9tIHRoZSBjaGFyaXR5PC9saT5cbiAgICAgICAgPC91bD5cbiAgICA8L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIGVuc3VyZSB5b3Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHNtb290aCBwcm9jZXNzaW5nIG9mIHlvdXIgdGF4IHJldHVybnMuPC9wPlxuICAgIDxwPlNob3VsZCB5b3UgbmVlZCBhbnkgYXNzaXN0YW5jZSBvciBoYXZlIHF1ZXN0aW9ucyByZWdhcmRpbmcgeW91ciBkb25hdGlvbiByZWNvcmRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIk90aGVyIEl0ZW1pemVkIEV4cGVuc2VzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiT3RoZXIgSXRlbWl6ZWQgRXhwZW5zZXNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGBcbiAgICA8cD5UaGFuayB5b3UgZm9yIGluZGljYXRpbmcgdGhhdCB0aGVyZSBtaWdodCBiZSBhZGRpdGlvbmFsIGluZGl2aWR1YWwsIG5vbi1idXNpbmVzcyBleHBlbnNlcyB5b3UndmUgaW5jdXJyZWQgdGhpcyB0YXggeWVhciwgd2hpY2ggbWF5IHF1YWxpZnkgZm9yIGl0ZW1pemVkIGRlZHVjdGlvbnMuIFRvIGVuc3VyZSB3ZSBtYXhpbWl6ZSB5b3VyIGRlZHVjdGlvbnMgYW5kIGFjY3VyYXRlbHkgY29tcGxldGUgeW91ciB0YXggcHJlcGFyYXRpb24sIHdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgZXhwZW5zZXMuPC9wPlxuICAgIDxwPlBsZWFzZSBmaW5kIGJlbG93IGEgZ3VpZGVsaW5lIG9mIHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHMgd2UgYXJlIGxvb2tpbmcgZm9yOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5EZXRhaWxzIG9mIHRoZSBFeHBlbnNlOiBBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGVhY2ggZXhwZW5zZSwgaW5jbHVkaW5nIHRoZSBwdXJwb3NlIGFuZCB3aHkgeW91IGJlbGlldmUgaXQgcXVhbGlmaWVzIGZvciBhbiBpdGVtaXplZCBkZWR1Y3Rpb24uPC9saT5cbiAgICAgICAgPGxpPkFtb3VudCBQYWlkOiBUaGUgdG90YWwgYW1vdW50IHBhaWQgZm9yIGVhY2ggZXhwZW5zZS48L2xpPlxuICAgICAgICA8bGk+RGF0ZXM6IFRoZSBkYXRlKHMpIG9uIHdoaWNoIHRoZSBleHBlbnNlIHdhcyBwYWlkLjwvbGk+XG4gICAgICAgIDxsaT5Qcm9vZiBvZiBQYXltZW50OiBSZWNlaXB0cywgYmFuayBzdGF0ZW1lbnRzLCBvciBjcmVkaXQgY2FyZCBzdGF0ZW1lbnRzIHNob3dpbmcgdGhlIHBheW1lbnQgb2YgdGhlc2UgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPkxlZ2FsIG9yIEZpbmFuY2lhbCBBZHZpc29yIFN0YXRlbWVudHM6IElmIGFwcGxpY2FibGUsIHN0YXRlbWVudHMgb3IgbGV0dGVycyBmcm9tIGxlZ2FsIG9yIGZpbmFuY2lhbCBhZHZpc29ycyBzdXBwb3J0aW5nIHRoZSBkZWR1Y3RpYmlsaXR5IG9mIHRoZSBleHBlbnNlLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5FeGFtcGxlcyBvZiBzdWNoIGV4cGVuc2VzIG1pZ2h0IGluY2x1ZGUgYnV0IGFyZSBub3QgbGltaXRlZCB0bzpcbiAgICA8dWw+XG4gICAgICAgIDxsaT5NZWRpY2FsIGV4cGVuc2VzIG5vdCBjb3ZlcmVkIGJ5IGhlYWx0aCBpbnN1cmFuY2U8L2xpPlxuICAgICAgICA8bGk+SW52ZXN0bWVudCBhbmQgZmluYW5jaWFsIGFkdmlzb3IgZmVlczwvbGk+XG4gICAgICAgIDxsaT5UYXggcHJlcGFyYXRpb24gZmVlczwvbGk+XG4gICAgICAgIDxsaT5TYWZlIGRlcG9zaXQgYm94IHJlbnRhbHM8L2xpPlxuICAgIDwvdWw+PC9wPlxuICAgIDxwPkl0IGlzIGNydWNpYWwgdGhhdCB3ZSByZWNlaXZlIHRoaXMgaW5mb3JtYXRpb24gYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHRpbWVseSBhbmQgZWZmaWNpZW50IHByZXBhcmF0aW9uIG9mIHlvdXIgdGF4IGRvY3VtZW50cy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiB3aGF0IHF1YWxpZmllcyBhcyBhbiBvdGhlciBpdGVtaXplZCBleHBlbnNlLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBEZXBlbmRlbnQgQ2FyZSBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5UaGFuayB5b3UgZm9yIGNvbmZpcm1pbmcgdGhhdCB5b3UgcGFpZCBmb3IgZGVwZW5kZW50IGNhcmUgc2VydmljZXMgbGFzdCB5ZWFyIHRvIGVuYWJsZSB5b3UgdG8gd29yayBvciBzZWFyY2ggZm9yIGVtcGxveW1lbnQuIFRvIGFjY3VyYXRlbHkgY2xhaW0gdGhlIDxzdHJvbmc+Q2hpbGQgYW5kIERlcGVuZGVudCBDYXJlIENyZWRpdDwvc3Ryb25nPiBvbiB5b3VyIHRheCByZXR1cm4sIHdlIHJlcXVpcmUgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLjwvcD5cbiAgICA8cD5QbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHMgYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZTo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+VGhlIGZ1bGwgbmFtZShzKSBhbmQgc29jaWFsIHNlY3VyaXR5IG51bWJlcihzKSAoU1NOKSBvZiB0aGUgZGVwZW5kZW50KHMpIGNhcmVkIGZvci48L2xpPlxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBwYWlkIGZvciBlYWNoIGRlcGVuZGVudOKAmXMgY2FyZSBzZXJ2aWNlcy48L2xpPlxuICAgICAgICA8bGk+TmFtZSwgYWRkcmVzcywgYW5kIFRheHBheWVyIElkZW50aWZpY2F0aW9uIE51bWJlciAoRUlOIG9yIFNTTikgb2YgdGhlIGNhcmUgcHJvdmlkZXIocykuPC9saT5cbiAgICAgICAgPGxpPlByb29mIG9mIHBheW1lbnQocykgbWFkZSB0byB0aGUgY2FyZWdpdmVyKHMpLCBzdWNoIGFzIHJlY2VpcHRzIG9yIGJhbmsgc3RhdGVtZW50cy48L2xpPlxuICAgICAgICA8bGk+SWYgdGhlIGRlcGVuZGVudCBpcyBhIGRpc2FibGVkIGFkdWx0LCBwbGVhc2UgcHJvdmlkZSBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZWlyIGNvbmRpdGlvbiB0byBjb25maXJtIGVsaWdpYmlsaXR5LjwvbGk+XG4gICAgICAgIDxsaT5BbnkgYXBwbGljYWJsZSBkYXRlcyBkdXJpbmcgd2hpY2ggdGhlIGNhcmUgd2FzIHByb3ZpZGVkLCBlc3BlY2lhbGx5IGlmIHRoZSBjYXJlIHdhcyBub3QgZm9yIHRoZSBmdWxsIHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCB0byBlbnN1cmUgd2UgY2FuIG1heGltaXplIHlvdXIgZWxpZ2libGUgY3JlZGl0IGFuZCBjb21wbHkgd2l0aCB0aGUgSVJTIHJlcXVpcmVtZW50cy4gU2hvdWxkIHlvdSBoYXZlIGNvbmNlcm5zIGFib3V0IGdhdGhlcmluZyBhbnkgb2YgdGhlIHJlcXVlc3RlZCBkb2N1bWVudGF0aW9uLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IGZvciBhc3Npc3RhbmNlLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuIFdlIGFyZSBoZXJlIHRvIHN1cHBvcnQgeW91IHRocm91Z2ggdGhpcyBwcm9jZXNzIHRvIGFjaGlldmUgdGhlIGJlc3QgcG9zc2libGUgb3V0Y29tZSBvbiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkNoaWxkIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDaGlsZCBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGV4YW1pbmluZyB5b3VyIGVsaWdpYmlsaXR5IGZvciB0aGUgPHN0cm9uZz5DaGlsZCBUYXggQ3JlZGl0PC9zdHJvbmc+LCBiYXNlZCBvbiB5b3VyIGFmZmlybWF0aXZlIHJlc3BvbnNlIHJlZ2FyZGluZyBkZXBlbmRlbnRzIHVuZGVyIHRoZSBhZ2Ugb2YgMTcuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgbWF4aW1pemVkIHRheCBiZW5lZml0cywga2luZGx5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5GdWxsIG5hbWUocykgb2YgdGhlIGNoaWxkIG9yIGNoaWxkcmVuLjwvbGk+XG4gICAgICAgIDxsaT5EYXRlKHMpIG9mIGJpcnRoIGZvciBlYWNoIGNoaWxkLjwvbGk+XG4gICAgICAgIDxsaT5Tb2NpYWwgU2VjdXJpdHkgTnVtYmVyKHMpIGZvciBlYWNoIGNoaWxkLjwvbGk+XG4gICAgICAgIDxsaT5BIHN0YXRlbWVudCBjb25maXJtaW5nIHRoZSBjaGlsZCBvciBjaGlsZHJlbiBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIGxhc3QgeWVhci4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIGluY2x1ZGUgZG9jdW1lbnRhdGlvbiBvZiBjdXN0b2R5IGFycmFuZ2VtZW50cy48L2xpPlxuICAgICAgICA8bGk+QSBkZXRhaWxlZCBvdmVydmlldyBvZiBob3cgeW91IHByb3ZpZGVkIG1vcmUgdGhhbiBoYWxmIG9mIHRoZWlyIGZpbmFuY2lhbCBzdXBwb3J0IGxhc3QgeWVhci4gVGhpcyBjYW4gaW5jbHVkZSByZWNvcmRzIG9mIGhvdXNpbmcsIGZvb2QsIGVkdWNhdGlvbiwgbWVkaWNhbCBjYXJlLCBhbmQgb3RoZXIgcmVsZXZhbnQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPkNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLCBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCwgdG8gYXNzaXN0IGluIGV2YWx1YXRpbmcgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbCBwaGFzZS1vdXRzIGJhc2VkIG9uIGluY29tZS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZS4gWW91ciBwcm9tcHQgcmVzcG9uc2Ugd2lsbCBhaWQgaW4gdGhlIHN3aWZ0IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBlbnN1cmUgdGhhdCB5b3UgcmVjZWl2ZSBhbGwgZWxpZ2libGUgdGF4IGJlbmVmaXRzLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBXZSBhcmUgaGVyZSB0byBoZWxwITwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBjdXJyZW50bHkgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybnMgYW5kIGhhdmUgbm90ZWQgdGhhdCB5b3UgbWF5IHF1YWxpZnkgZm9yIHRoZSA8c3Ryb25nPkFkZGl0aW9uYWwgQ2hpbGQgVGF4IENyZWRpdDwvc3Ryb25nPiBiYXNlZCBvbiB5b3VyIHByZWxpbWluYXJ5IGluZm9ybWF0aW9uLiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IHJldHVybiwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFF1YWxpZnlpbmcgQ2hpbGRyZW46PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIHRoZSBTb2NpYWwgU2VjdXJpdHkgY2FyZHMgYW5kIGJpcnRoIGNlcnRpZmljYXRlcyBmb3IgZWFjaCBvZiB5b3VyIHF1YWxpZnlpbmcgY2hpbGRyZW4gdW5kZXIgdGhlIGFnZSBvZiAxNy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IEZ1cm5pc2ggYWxsIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBwcm9vZiBvZiBpbmNvbWUgdG8gY29uZmlybSB5b3UgaGF2ZSBlYXJuZWQgYXQgbGVhc3QgJDIsNTAwLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5QcmV2aW91cyBZZWFy4oCZcyBUYXggUmV0dXJuOjwvc3Ryb25nPiBBIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuIHRvIHZlcmlmeSB0aGUgQ2hpbGQgVGF4IENyZWRpdCBhbW91bnQgeW91IHJlY2VpdmVkIG9yIHdlcmUgZWxpZ2libGUgdG8gcmVjZWl2ZS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+SVJTIExldHRlciA2NDE5Ojwvc3Ryb25nPiBJZiBhcHBsaWNhYmxlLCBwcm92aWRlIHRoZSBJUlMgTGV0dGVyIDY0MTkgZm9yIHRoZSB0YXggeWVhciByZWdhcmRpbmcgdGhlIGFkdmFuY2UgQ2hpbGQgVGF4IENyZWRpdCBwYXltZW50cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VG8gZmFjaWxpdGF0ZSBhIHNtb290aCBwcm9jZXNzLCB3ZSBraW5kbHkgYXNrIHlvdSB0byBzZW5kIHRoZSBhYm92ZSBhcyBzb29uIGFzIHBvc3NpYmxlLCBlbnN1cmluZyBhbGwgc3VibWlzc2lvbnMgYXJlIGNsZWFyIGFuZCBsZWdpYmxlLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UgYXJlIGNvbW1pdHRlZCB0byBzZXJ2aW5nIHlvdXIgdGF4IHByZXBhcmF0aW9uIG5lZWRzIGVmZmljaWVudGx5IGFuZCBzZWN1cmluZyB0aGUgYmVzdCBwb3NzaWJsZSBvdXRjb21lIGZvciB5b3UgYW5kIHlvdXIgZmFtaWx5LjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJDcmVkaXQgZm9yIE90aGVyIERlcGVuZGVudHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHlvdSBpbmRpY2F0ZWQgaGF2aW5nIGRlcGVuZGVudHMgdGhhdCBtYXkgcXVhbGlmeSBmb3IgdGhlIDxzdHJvbmc+Q3JlZGl0IGZvciBPdGhlciBEZXBlbmRlbnRzPC9zdHJvbmc+LiBUbyBlbnN1cmUgd2UgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgdGF4IGJlbmVmaXRzLCB3ZSBuZWVkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZGVwZW5kZW50cy48L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPkZ1bGwgbmFtZSBvZiBlYWNoIGRlcGVuZGVudC48L2xpPlxuICAgICAgPGxpPlRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UgKGUuZy4sIHBhcmVudCwgc2libGluZywgYWR1bHQgY2hpbGQsIG9yIG90aGVyKS48L2xpPlxuICAgICAgPGxpPlRoZWlyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTikgb3IgSW5kaXZpZHVhbCBUYXhwYXllciBJZGVudGlmaWNhdGlvbiBOdW1iZXIgKElUSU4pLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBsaXZlZCB3aXRoIHlvdSBmb3IgbW9yZSB0aGFuIGhhbGYgb2YgdGhlIHRheCB5ZWFyLiBQbGVhc2UgcHJvdmlkZSBhbnkgcmVsZXZhbnQgZGV0YWlscyBvciBkb2N1bWVudGF0aW9uIHRoYXQgY2FuIHN1cHBvcnQgdGhpcyBjbGFpbSAoaWYgYXZhaWxhYmxlKS48L2xpPlxuICAgICAgPGxpPkRldGFpbGVkIGxpc3Qgb2YgdGhlIGZpbmFuY2lhbCBzdXBwb3J0IHlvdSBwcm92aWRlZC4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBmb29kLCBzaGVsdGVyLCBjbG90aGluZywgbWVkaWNhbCBjYXJlLCBlZHVjYXRpb24sIGFuZCB0cmFuc3BvcnRhdGlvbiBjb3N0cy48L2xpPlxuICAgICAgPGxpPkFueSBpbmNvbWUgaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVwZW5kZW50LiBUaGlzIGluY2x1ZGVzIGluY29tZSBzdGF0ZW1lbnRzIG9yIGFuIGFmZmlybWF0aW9uIHRoYXQgdGhleSBoYWQgbm8gaW5jb21lLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhleSBhcmUgYSBVLlMuIGNpdGl6ZW4sIFUuUy4gbmF0aW9uYWwsIG9yIGEgcmVzaWRlbnQgYWxpZW4gb2YgdGhlIFVuaXRlZCBTdGF0ZXMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBzZW5kIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgd2UgY2FuIHByb2NlZWQgd2l0aCB5b3VyIHRheCBwcmVwYXJhdGlvbiB3aXRob3V0IGRlbGF5LiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPiBcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci4gV2UncmUgaGVyZSB0byBoZWxwIG1ha2UgeW91ciB0YXggZmlsaW5nIHByb2Nlc3MgYXMgc21vb3RoIGFuZCBlZmZpY2llbnQgYXMgcG9zc2libGUuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFkb3B0aW9uIENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkb3B0aW9uIENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIHVuZGVyc3RhbmQgdGhhdCB5b3UndmUgaW5kaWNhdGVkIGhhdmluZyBleHBlbnNlcyByZWxhdGVkIHRvIGFkb3B0aW5nIGEgY2hpbGQgbGFzdCB5ZWFyLiBUbyBhY2N1cmF0ZWx5IGNsYWltIHRoZSBBZG9wdGlvbiBDcmVkaXQgb24geW91ciB0YXggcmV0dXJucywgd2UgcmVxdWlyZSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uLjwvcD5cbiAgICA8b2w+XG4gICAgICA8bGk+RmluYWxpemVkIEFkb3B0aW9uIERlY3JlZSBvciBDZXJ0aWZpY2F0ZS48L2xpPlxuICAgICAgPGxpPkRldGFpbGVkIExlZ2FsIEZlZXMgSW52b2ljZSAoaW5jbHVkaW5nIHRoZSBhdHRvcm5leeKAmXMgbmFtZSwgYWRkcmVzcywgYW5kIHRoZSBkYXRlIG9mIHNlcnZpY2UpLjwvbGk+XG4gICAgICA8bGk+Q291cnQgQ29zdHMgUmVjZWlwdHMuPC9saT5cbiAgICAgIDxsaT5UcmF2ZWwgRXhwZW5zZXMgUmVjZWlwdHMgKGFpcmZhcmUsIGhvdGVsLCBtZWFscykgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWRvcHRpb24gcHJvY2Vzcy48L2xpPlxuICAgICAgPGxpPkFueSByZWxldmFudCBkb2N1bWVudHMgZm9yIGEgY2hpbGQgd2l0aCBzcGVjaWFsIG5lZWRzLCBpZiBhcHBsaWNhYmxlLjwvbGk+XG4gICAgICA8bGk+Rm9yZWlnbiBhZG9wdGlvbjogUHJvdmlkZSB0aGUgY291bnRyeSdzIGxlZ2FsIGRvY3VtZW50YXRpb24gcHJvdmluZyB0aGUgYWRvcHRpb24gd2FzIGZpbmFsaXplZC48L2xpPlxuICAgICAgPGxpPklSUyBGb3JtIDg4MzksIFF1YWxpZmllZCBBZG9wdGlvbiBFeHBlbnNlcyAoaWYgeW91IGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gY29tcGxldGUgdGhpcykuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgYWxsIHByb3ZpZGVkIGRvY3VtZW50cyBhcmUgY2xlYXIgYW5kIGxlZ2libGUuIEluY29tcGxldGUgb3IgdW5jbGVhciBkb2N1bWVudGF0aW9uIG1heSBkZWxheSB0aGUgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4gYW5kIHRoZSBwb3RlbnRpYWwgY3JlZGl0LjwvcD5cbiAgICA8cD5TaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGNsYXJpZmljYXRpb24gb24gd2hhdCB0byBwcm92aWRlLCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cyBkaXJlY3RseS4gT3VyIGdvYWwgaXMgdG8gYXNzaXN0IHlvdSBpbiBtYXhpbWl6aW5nIHlvdXIgYmVuZWZpdHMgd2hpbGUgZW5zdXJpbmcgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkFtZXJpY2FuIE9wcG9ydHVuaXR5IFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+QmFzZWQgb24geW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSByZWdhcmRpbmcgZXhwZW5zZXMgcGFpZCBsYXN0IHllYXIgZm9yIGNvbGxlZ2UsIHdlIG1heSBiZSBhYmxlIHRvIGNsYWltIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChBT1RDKSBvbiB5b3VyIGJlaGFsZi4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm5zIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIEFPVEMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZGV0YWlsZWQgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50czo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+VHVpdGlvbiBTdGF0ZW1lbnRzPC9zdHJvbmc+IChGb3JtIDEwOTgtVCkgZm9yIGVhY2ggc3R1ZGVudCBmb3Igd2hvbSB0aGUgZXhwZW5zZXMgd2VyZSBwYWlkLiBUaGlzIGZvcm0gaXMgdHlwaWNhbGx5IHByb3ZpZGVkIGJ5IHRoZSBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbi48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UmVjZWlwdHMgYW5kIFJlY29yZHM8L3N0cm9uZz4gZm9yIHJlbGF0ZWQgZWR1Y2F0aW9uYWwgZXhwZW5zZXMgbm90IGNvdmVyZWQgYnkgdGhlIHR1aXRpb24gc3RhdGVtZW50LiBUaGlzIGluY2x1ZGVzIGJvb2tzLCBzdXBwbGllcywgYW5kIGVxdWlwbWVudCByZXF1aXJlZCBmb3IgZW5yb2xsbWVudCBvciBhdHRlbmRhbmNlLjwvbGk+XG4gICAgICA8bGk+Q29uZmlybWF0aW9uIHRoYXQgdGhlIHN0dWRlbnQgd2FzIGVucm9sbGVkIDxzdHJvbmc+YXQgbGVhc3QgaGFsZi10aW1lPC9zdHJvbmc+IGluIGEgcHJvZ3JhbSBsZWFkaW5nIHRvIGEgZGVncmVlLCBjZXJ0aWZpY2F0ZSwgb3Igb3RoZXIgcmVjb2duaXplZCBlZHVjYXRpb25hbCBjcmVkZW50aWFsLjwvbGk+XG4gICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnQgY29uZmlybWluZyB0aGF0IHRoZSBleHBlbnNlcyB3ZXJlIGZvciB0aGUgPHN0cm9uZz5maXJzdCBmb3VyIHllYXJzPC9zdHJvbmc+IG9mIHBvc3Qtc2Vjb25kYXJ5IGVkdWNhdGlvbi48L2xpPlxuICAgICAgPGxpPkV2aWRlbmNlIHRvIHNob3cgdGhhdCB0aGUgc3R1ZGVudCBoYWQgbm90IGNsYWltZWQgdGhlIEFPVEMgKG9yIHRoZSBmb3JtZXIgSG9wZSBjcmVkaXQpIGZvciBtb3JlIHRoYW4gZm91ciB0YXggeWVhcnMuPC9saT5cbiAgICAgIDxsaT5Qcm9vZiB0aGF0IG5laXRoZXIgdGhlIHN0dWRlbnQgbm9yIHRoZSBjbGFpbWFudCAoaWYgbm90IHRoZSBzdHVkZW50KSBpcyBhIG5vbnJlc2lkZW50IGFsaWVuIGZvciB0YXggcHVycG9zZXMuPC9saT5cbiAgICAgIDxsaT5BIHN0YXRlbWVudCBpbmRpY2F0aW5nIGlmIGFueSBmZWxvbnkgZHJ1ZyBjb252aWN0aW9ucyB3ZXJlIHJlY2VpdmVkIGJ5IHRoZSBzdHVkZW50IGR1cmluZyB0aGUgdGF4IHllYXIuIFRoaXMgaXMgZXNzZW50aWFsIGFzIHN1Y2ggY29udmljdGlvbnMgZGlzcXVhbGlmeSB0aGUgc3R1ZGVudCBmcm9tIGNsYWltaW5nIHRoZSBBT1RDLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZ2F0aGVyIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlLiBPbmNlIHdlIGhhdmUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24sIHdlIHdpbGwgcHJvY2VlZCB3aXRoIHRoZSBtYXhpbWl6YXRpb24gYW5kIGFwcGxpY2F0aW9uIG9mIHRoZSBBbWVyaWNhbiBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IHRvIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJMaWZldGltZSBMZWFybmluZyBUYXggQ3JlZGl0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiTGlmZXRpbWUgTGVhcm5pbmcgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSwgeW91ciBzcG91c2UsIG9yIHlvdXIgZGVwZW5kZW50cyBoYXZlIHBhaWQgZm9yIGhpZ2hlciBlZHVjYXRpb24gbGFzdCB5ZWFyLiBUaGlzIG1ha2VzIHlvdSBwb3RlbnRpYWxseSBlbGlnaWJsZSBmb3IgdGhlIExpZmV0aW1lIExlYXJuaW5nIFRheCBDcmVkaXQsIHdoaWNoIGNhbiBwcm92aWRlIHNpZ25pZmljYW50IHRheCBzYXZpbmdzLiBUbyBhY2N1cmF0ZWx5IGRldGVybWluZSB5b3VyIGVsaWdpYmlsaXR5IGFuZCBjYWxjdWxhdGUgdGhlIGNyZWRpdCwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGRvY3VtZW50cyBhbmQgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkZvcm0gMTA5OC1UIGZyb20gZWFjaCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBhdHRlbmRlZCBieSB5b3UsIHlvdXIgc3BvdXNlLCBvciBkZXBlbmRlbnRzLiBUaGlzIGZvcm0gc2hvd3MgdGhlIGFtb3VudHMgcGFpZCBmb3IgdHVpdGlvbiBhbmQgcmVsYXRlZCBleHBlbnNlcy48L2xpPlxuICAgICAgICA8bGk+UmVjZWlwdHMgb3IgYmFuayBzdGF0ZW1lbnRzIHNob3dpbmcgcGF5bWVudHMgbWFkZSBmb3IgdHVpdGlvbiwgZmVlcywgYm9va3MsIHN1cHBsaWVzLCBhbmQgZXF1aXBtZW50IHJlcXVpcmVkIGZvciB5b3VyIGNvdXJzZXMuIFBsZWFzZSBub3RlIHRoYXQgcm9vbSBhbmQgYm9hcmQsIGluc3VyYW5jZSwgbWVkaWNhbCBleHBlbnNlcywgYW5kIHRyYW5zcG9ydGF0aW9uIGFyZSBub3QgcXVhbGlmaWVkIGV4cGVuc2VzLjwvbGk+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYW55IHNjaG9sYXJzaGlwcywgZ3JhbnRzLCBvciBvdGhlciB0YXgtZnJlZSBlZHVjYXRpb25hbCBhc3Npc3RhbmNlIHJlY2VpdmVkLiBUaGlzIGhlbHBzIHVzIGRldGVybWluZSB0aGUgbmV0IGFtb3VudCBvZiBxdWFsaWZpZWQgZXhwZW5zZXMuPC9saT5cbiAgICAgICAgPGxpPklmIGFwcGxpY2FibGUsIGFueSByZWNvcmRzIG9mIGZlbG9uaWVzIChhcyBpbmRpdmlkdWFscyB3aXRoIGZlbG9ueSBkcnVnIGNvbnZpY3Rpb25zIGFyZSBub3QgZWxpZ2libGUgZm9yIHRoaXMgY3JlZGl0KS48L2xpPlxuICAgICAgICA8bGk+VGhlIHRvdGFsIGFtb3VudCBvZiBleHBlbnNlcyBwYWlkIHdpdGggZGlzdHJpYnV0ZWQgZWFybmluZ3MgZnJvbSBhIDUyOSBwbGFuLCBpZiBhbnkuIFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBhcyBpdCBtYXkgYWZmZWN0IHRoZSBjcmVkaXQgY2FsY3VsYXRpb24uPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIGlzIGZvciB0aGUgdGF4IHllYXIgd2UgYXJlIHByZXBhcmluZyB5b3VyIHJldHVybiBmb3IuIEdhdGhlcmluZyBhbmQgdmVyaWZ5aW5nIHRoZXNlIGRvY3VtZW50cyBlYXJseSBpbiB0aGUgcHJvY2VzcyB3aWxsIHN0cmVhbWxpbmUgeW91ciB0YXggcHJlcGFyYXRpb24gYW5kIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBiZW5lZml0IGxlZ2FsbHkgYXZhaWxhYmxlIHRvIHlvdS48L3A+XG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLiBZb3VyIHByb21wdCByZXNwb25zZSB3aWxsIGdyZWF0bHkgYWlkIGluIHRoZSBlZmZpY2llbnQgY29tcGxldGlvbiBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyB0aGF0IHlvdSBlYXJuZWQgbW9uZXkgZnJvbSB3b3JrIGFuZCBoYXZlIGEgcmVsYXRpdmVseSBsb3cgdG8gbW9kZXJhdGUgaW5jb21lIGxhc3QgeWVhciwgeW91IG1heSBiZSBlbGlnaWJsZSBmb3IgdGhlIEVhcm5lZCBJbmNvbWUgVGF4IENyZWRpdCAoRUlUQykuIFRvIGFjY3VyYXRlbHkgYXNzZXNzIHlvdXIgZWxpZ2liaWxpdHkgYW5kIHBvdGVudGlhbGx5IG1heGltaXplIHlvdXIgRUlUQyBjbGFpbSwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBkb2N1bWVudHMgYW5kIGluZm9ybWF0aW9uOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEVhcm5lZCBJbmNvbWU6PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFsbCBXLTIgZm9ybXMgaWYgeW91IHdlcmUgZW1wbG95ZWQgYnkgc29tZW9uZSBlbHNlLCBvciBhIHN1bW1hcnkgb2YgaW5jb21lIGFuZCBleHBlbnNlcyBpZiB5b3Ugd2VyZSBzZWxmLWVtcGxveWVkIG9yIHJhbiBhIGJ1c2luZXNzIG9yIGZhcm0uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+U29jaWFsIFNlY3VyaXR5IE51bWJlciAoU1NOKTo8L3N0cm9uZz4gQ29waWVzIG9mIFNvY2lhbCBTZWN1cml0eSBjYXJkcyBmb3IgeW91LCB5b3VyIHNwb3VzZSAoaWYgZmlsaW5nIGpvaW50bHkpLCBhbmQgYW55IGRlcGVuZGVudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJvb2Ygb2YgUmVzaWRlbmN5Ojwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHRoYXQgeW91ciBjaGlsZChyZW4pIGxpdmVkIHdpdGggeW91IGluIHRoZSBVbml0ZWQgU3RhdGVzIGZvciBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgdGF4IHllYXIsIGlmIGFwcGxpY2FibGUuIFRoaXMgY2FuIGluY2x1ZGUgc2Nob29sIHJlY29yZHMsIG1lZGljYWwgcmVjb3Jkcywgb3IgYSBzaWduZWQgbGV0dGVyIGZyb20gYSBsYW5kbG9yZCBvciBhbm90aGVyIHRoaXJkIHBhcnR5LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkludmVzdG1lbnQgSW5jb21lIFN0YXRlbWVudDo8L3N0cm9uZz4gSWYgYXBwbGljYWJsZSwgcGxlYXNlIHByb3ZpZGUgYSBzdGF0ZW1lbnQgb2YgYW55IGludmVzdG1lbnQgaW5jb21lIHlvdSByZWNlaXZlZCwgYXMgdGhpcyBjYW4gYWZmZWN0IEVJVEMgZWxpZ2liaWxpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmlsaW5nIFN0YXR1cyBWZXJpZmljYXRpb246PC9zdHJvbmc+IENvbmZpcm0geW91ciBmaWxpbmcgc3RhdHVzIHRvIGVuc3VyZSBwcm9wZXIgRUlUQyBjYWxjdWxhdGlvbi4gVGhpcyBjb3VsZCBiZSBTaW5nbGUsIE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIEhlYWQgb2YgSG91c2Vob2xkLCBldGMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlvdXMgWWVhciBUYXggUmV0dXJuOjwvc3Ryb25nPiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgeWVhciB5b3UgYXJlIGNsYWltaW5nIEVJVEMgb3IgaWYgeW91IHdlcmUgZWxpZ2libGUgZm9yIEVJVEMgaW4gdGhlIHByZXZpb3VzIHRheCB5ZWFyLCBwbGVhc2UgcHJvdmlkZSBhIGNvcHkgb2YgeW91ciBsYXN0IHllYXIncyB0YXggcmV0dXJuLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgY2xlYXJseSBsZWdpYmxlIGFuZCBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuIGFuZCBFSVRDIGNsYWltLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBkbyBub3QgaGVzaXRhdGUgdG8gY29udGFjdCB1cy48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJldGlyZW1lbnQgU2F2aW5ncyBDb250cmlidXRpb24gQ3JlZGl0XCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiUmV0aXJlbWVudCBTYXZpbmdzIENvbnRyaWJ1dGlvbiBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBub3RpY2VkIHRoYXQgeW91J3ZlIGluZGljYXRlZCBjb250cmlidXRpbmcgdG8gYSByZXRpcmVtZW50IHBsYW4gaW4gdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgYXBwcm9wcmlhdGUgXCJSZXRpcmVtZW50IFNhdmluZ3MgQ29udHJpYnV0aW9uIENyZWRpdCxcIiB3ZSByZXF1aXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIGNvbnRyaWJ1dGlvbnMuIFBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmc6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHJldGlyZW1lbnQgcGxhbnMgeW91J3ZlIGNvbnRyaWJ1dGVkIHRvIChlLmcuLCBJUkEsIDQwMShrKSwgZXRjLik6PC9saT5cbiAgICAgIDx1bD5cbiAgICAgICAgPGxpPk5hbWUgb2YgdGhlIHBsYW4ocyk8L2xpPlxuICAgICAgICA8bGk+VHlwZSBvZiBwbGFuKHMpPC9saT5cbiAgICAgICAgPGxpPkNvbnRyaWJ1dGVkIGFtb3VudCB0byBlYWNoIHBsYW48L2xpPlxuICAgICAgPC91bD5cbiAgICAgIDxsaT5Zb3VyIGZpbGluZyBzdGF0dXMgKFNpbmdsZSwgTWFycmllZCBGaWxpbmcgSm9pbnRseSwgZXRjLik8L2xpPlxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgKGUuZy4sIGFjY291bnQgc3RhdGVtZW50cywgRm9ybSA1NDk4LCB0cmFuc2FjdGlvbiBzdW1tYXJpZXMpPC9saT5cbiAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBhZ2UsIHRvIGRldGVybWluZSBlbGlnaWJpbGl0eTwvbGk+XG4gICAgICA8bGk+QW55IG5vdGljZXMgb3Igc3RhdGVtZW50cyBmcm9tIHRoZSBwbGFuIGFkbWluaXN0cmF0b3IgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnM8L2xpPlxuICAgICAgPGxpPkZvciBtYXJyaWVkIGZpbGluZyBqb2ludGx5LCBzaW1pbGFyIGRldGFpbHMgZm9yIHlvdXIgc3BvdXNl4oCZcyBjb250cmlidXRpb25zLCBpZiBhcHBsaWNhYmxlPC9saT5cbiAgICA8L29sPiAgXG4gICAgPHA+UGxlYXNlIGVuc3VyZSB0aGUgaW5mb3JtYXRpb24gaXMgc3VibWl0dGVkIGluIGEgdGltZWx5IG1hbm5lciB0byBmYWNpbGl0YXRlIGFjY3VyYXRlIGFuZCBlZmZpY2llbnQgcHJvY2Vzc2luZyBvZiB5b3VyIHRheCByZXR1cm4uIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhlc2UgZGV0YWlscywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMgZGlyZWN0bHkuPC9wPiBcbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIG1hdHRlci48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRXhjZXNzIFNvY2lhbCBTZWN1cml0eSBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJFeGNlc3MgU29jaWFsIFNlY3VyaXR5IENyZWRpdFwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPllvdXIgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgbGFzdCB5ZWFyLCB5b3Ugd29ya2VkIGZvciB0d28gb3IgbW9yZSBlbXBsb3llcnMgYW5kIGhhZCBhIHRvdGFsIGFtb3VudCBvZiBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgd2l0aGhlbGQgZnJvbSB5b3VyIHBheWNoZWNrcyB0aGF0IGV4Y2VlZGVkIHRoZSBsaW1pdCBmb3IgdGhlIHllYXIuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgcG90ZW50aWFsIEV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgQ3JlZGl0IGFuZCBlbnN1cmUgcHJvcGVyIGFkanVzdG1lbnQgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5XLTIgRm9ybXMgZnJvbSBBbGwgRW1wbG95ZXJzOjwvc3Ryb25nPiBQbGVhc2UgcHJvdmlkZSBjb3BpZXMgb2YgVy0yIGZvcm1zIGZyb20gYWxsIHlvdXIgZW1wbG95ZXJzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24uIFRoaXMgaXMgdml0YWwgdG8gY2FsY3VsYXRlIHRoZSBleGFjdCBhbW91bnQgb2YgU29jaWFsIFNlY3VyaXR5IHRheCB3aXRoaGVsZC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxlZCBQYXkgU3R1YnM6PC9zdHJvbmc+IElmIHBvc3NpYmxlLCBpbmNsdWRlIHlvdXIgZmluYWwgcGF5IHN0dWJzIG9mIHRoZSB5ZWFyIGZyb20gZWFjaCBlbXBsb3llci4gVGhpcyBjYW4gaGVscCB2ZXJpZnkgdGhlIHRvdGFsIGVhcm5pbmdzIGFuZCB0aGUgYW1vdW50IG9mIFNvY2lhbCBTZWN1cml0eSB0YXggd2l0aGhlbGQsIGVzcGVjaWFsbHkgaWYgYW55IGRpc2NyZXBhbmNpZXMgYXJpc2Ugd2l0aCB0aGUgVy0yIGluZm9ybWF0aW9uLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlBlcnNvbmFsIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBFbnN1cmUgeW91ciBmdWxsIG5hbWUsIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgKFNTTiksIGFuZCBjdXJyZW50IGFkZHJlc3MgYXJlIGNvcnJlY3QgYW5kIHVwZGF0ZWQgZm9yIGFjY3VyYXRlIGZpbGluZy48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Db25maXJtYXRpb24gTGV0dGVyIChJZiBBdmFpbGFibGUpOjwvc3Ryb25nPiBJZiB5b3UndmUgcmVjZWl2ZWQgYW55IGNvbmZpcm1hdGlvbiBmcm9tIHRoZSBJUlMgb3IgeW91ciBlbXBsb3llcnMgcmVnYXJkaW5nIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgY29udHJpYnV0aW9ucywgcGxlYXNlIGluY2x1ZGUgdGhlc2UgY29tbXVuaWNhdGlvbnMuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSBjb21wbGV0aW5nIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJpbmcgdGhhdCB5b3UgcmVjZWl2ZSBhbnkgcmVmdW5kIG9mIGV4Y2VzcyBTb2NpYWwgU2VjdXJpdHkgdGF4ZXMgcGFpZC4gUGxlYXNlIHNlbmQgdGhlIHJlcXVlc3RlZCBkb2N1bWVudHMgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGltZWx5IHByb2Nlc3Npbmcgb2YgeW91ciB0YXggcmV0dXJuLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBhc3Npc3RhbmNlLCBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0IHRvIHVzLiBZb3VyIHByb21wdCBjb29wZXJhdGlvbiBpcyBncmVhdGx5IGFwcHJlY2lhdGVkIHRvIGZhY2lsaXRhdGUgYSBzbW9vdGggdGF4IGZpbGluZyBwcm9jZXNzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQcmVtaXVtIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4IHJldHVybiBhbmQgaGF2ZSBub3RlZCB0aGF0IHlvdSBvciBhIGZhbWlseSBtZW1iZXIgZW5yb2xsZWQgaW4gYSBoZWFsdGggaW5zdXJhbmNlIHBsYW4gdGhyb3VnaCB0aGUgTWFya2V0cGxhY2UgbGFzdCB5ZWFyLiBUaGlzIG1heSBtYWtlIHlvdSBlbGlnaWJsZSBmb3IgdGhlIFByZW1pdW0gVGF4IENyZWRpdCwgd2hpY2ggY2FuIHByb3ZpZGUgc2lnbmlmaWNhbnQgc2F2aW5ncyBvbiB5b3VyIHRheCBiaWxsLjwvcD5cbiAgICA8cD5UbyBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB5b3VyIFByZW1pdW0gVGF4IENyZWRpdCBhbmQgZW5zdXJlIHlvdXIgdGF4IHJldHVybiBpcyBjb3JyZWN0bHkgZmlsZWQsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcm0gMTA5NS1BLCBIZWFsdGggSW5zdXJhbmNlIE1hcmtldHBsYWNlIFN0YXRlbWVudDwvc3Ryb25nPjogVGhpcyBmb3JtIGlzIGNydWNpYWwgYXMgaXQgcHJvdmlkZXMgZGV0YWlscyBvZiB0aGUgaGVhbHRoIGNvdmVyYWdlLCBpbmNsdWRpbmcgdGhlIG1vbnRocyBvZiBjb3ZlcmFnZSBhbmQgdGhlIGFtb3VudCBvZiBwcmVtaXVtIHBhaWQuIElmIHlvdSBvciBhbnkgZmFtaWx5IG1lbWJlciB3YXMgZW5yb2xsZWQgaW4gZGlmZmVyZW50IHBsYW5zLCBwbGVhc2UgcHJvdmlkZSBhIEZvcm0gMTA5NS1BIGZvciBlYWNoIHBsYW4uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEluZm9ybWF0aW9uPC9zdHJvbmc+OiBQbGVhc2UgcHJvdmlkZSBhbGwgc291cmNlcyBvZiBpbmNvbWUgdG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBob3VzZWhvbGQgaW5jb21lLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIFctMiBmb3JtcywgMTA5OSBmb3JtcywgYW5kIGFueSBvdGhlciBkb2N1bWVudGF0aW9uIGRlbW9uc3RyYXRpbmcgaW5jb21lIHJlY2VpdmVkIHRocm91Z2hvdXQgdGhlIHllYXIuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+RmFtaWx5IFNpemUgYW5kIEhvdXNlaG9sZCBJbmZvcm1hdGlvbjwvc3Ryb25nPjogQ29uZmlybSB0aGUgbnVtYmVyIG9mIGRlcGVuZGVudHMgYW5kIGFueSBjaGFuZ2VzIGluIHlvdXIgaG91c2Vob2xkIGxhc3QgeWVhciwgYXMgdGhpcyBjb3VsZCBhZmZlY3QgeW91ciBlbGlnaWJpbGl0eSBhbmQgdGhlIGFtb3VudCBvZiB0aGUgY3JlZGl0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFkdmFuY2VkIFByZW1pdW0gVGF4IENyZWRpdCAoQVBUQykgUmVwYXltZW50IEluZm9ybWF0aW9uPC9zdHJvbmc+LCBpZiBhcHBsaWNhYmxlOiBJZiB5b3UgcmVjZWl2ZWQgYW4gYWR2YW5jZSBwYXltZW50IG9mIHRoZSBwcmVtaXVtIHRheCBjcmVkaXQsIHdlIG5lZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZXNlIHBheW1lbnRzIHRvIHJlY29uY2lsZSB0aGUgYW1vdW50IG9uIHlvdXIgcmV0dXJuLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5QbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBzdWJtaXR0ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSB0byBhdm9pZCBhbnkgZGVsYXlzIGluIHByb2Nlc3NpbmcgeW91ciB0YXggcmV0dXJuLiBTaG91bGQgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciByZXF1aXJlIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoZXNlIGRvY3VtZW50cywgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3Qgb3VyIG9mZmljZS48L3A+XG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuIFdlIGxvb2sgZm9yd2FyZCB0byBzZXJ2aW5nIHlvdSBhbmQgZW5zdXJpbmcgeW91IHJlY2VpdmUgYWxsIHRoZSB0YXggYmVuZWZpdHMgeW91IGFyZSBlbnRpdGxlZCB0by48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiTmV0IEludmVzdG1lbnQgSW5jb21lIFRheFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIk5ldCBJbnZlc3RtZW50IEluY29tZSBUYXhcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyBwYXJ0IG9mIG91ciBvbmdvaW5nIGVmZm9ydHMgdG8gZW5zdXJlIHRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MsIHdlIGhhdmUgaWRlbnRpZmllZCB0aGF0IHlvdXIgaW5jb21lIHRoaXMgeWVhciBpbmNsdWRlcyBzaWduaWZpY2FudCBhbW91bnRzIGZyb20gaW52ZXN0bWVudHMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgTmV0IEludmVzdG1lbnQgSW5jb21lIFRheCwgaXQgaXMgZXNzZW50aWFsIHRoYXQgd2UgZ2F0aGVyIGNvbXByZWhlbnNpdmUgZGV0YWlscyByZWdhcmRpbmcgeW91ciBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkb2N1bWVudGF0aW9uIGFuZCBpbmZvcm1hdGlvbiBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+SW50ZXJlc3QgSW5jb21lIFN0YXRlbWVudHM6PC9zdHJvbmc+IERvY3VtZW50cyBzdWNoIGFzIDEwOTktSU5UIG9yIHNpbWlsYXIgZm9ybXMgc2hvd2luZyBpbnRlcmVzdCBlYXJuZWQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5EaXZpZGVuZCBJbmNvbWUgU3RhdGVtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHN1Y2ggYXMgMTA5OS1ESVYgb3Igc2ltaWxhciBmb3JtcyBkZXRhaWxpbmcgZGl2aWRlbmQgaW5jb21lIHJlY2VpdmVkLjwvbGk+XG4gICAgPGxpPjxzdHJvbmc+Q2FwaXRhbCBHYWlucyBSZWNvcmRzOjwvc3Ryb25nPiBTYWxlcyByZWNlaXB0cyBvciBicm9rZXIgc3RhdGVtZW50cyBzaG93aW5nIHByb2NlZWRzIGZyb20gdGhlIHNhbGUgb2YgYXNzZXRzLCBhbG9uZyB3aXRoIHB1cmNoYXNlIGRvY3VtZW50YXRpb24gdG8gY2FsY3VsYXRlIGdhaW5zIG9yIGxvc3Nlcy48L2xpPlxuICAgIDxsaT48c3Ryb25nPlJlbnRhbCBhbmQgUm95YWx0eSBJbmNvbWUgRG9jdW1lbnRhdGlvbjo8L3N0cm9uZz4gRGV0YWlsZWQgcmVjb3JkcyBvZiBpbmNvbWUgYW5kIGFzc29jaWF0ZWQgZXhwZW5zZXMgZnJvbSByZW50YWwgcHJvcGVydGllcyBvciByb3lhbHRpZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Ob24tUXVhbGlmaWVkIEFubnVpdGllcyBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBZZWFyLWVuZCBzdGF0ZW1lbnRzIGZvciBhbnkgbm9uLXF1YWxpZmllZCBhbm51aXR5IGNvbnRyYWN0cyBzaG93aW5nIGRpc3RyaWJ1dGlvbnMgcmVjZWl2ZWQuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5Gb3JtIDg5NjA6PC9zdHJvbmc+IElmIGF2YWlsYWJsZSwgYW55IHByaW9yIHllYXIgRm9ybSA4OTYwIHlvdSBoYXZlIGZpbGVkIGZvciBOZXQgSW52ZXN0bWVudCBJbmNvbWUgVGF4LCB3aGljaCBjYW4gcHJvdmlkZSBhIGJhc2lzIGZvciBlc3RpbWF0ZXMgYW5kIHBsYW5uaW5nLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5FbnN1cmluZyB3ZSBoYXZlIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gd2lsbCBub3Qgb25seSBzdHJlYW1saW5lIHlvdXIgdGF4IHByZXBhcmF0aW9uIHByb2Nlc3MgYnV0IGFsc28gaGVscCBpbiBsZXZlcmFnaW5nIHBvdGVudGlhbCB0YXgtc2F2aW5nIG9wcG9ydHVuaXRpZXMgcmVsYXRlZCB0byBpbnZlc3RtZW50IGluY29tZS4gUGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzIGlmIHlvdSBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIGFueSBvZiB0aGUgYWJvdmUgaW5mb3JtYXRpb24uPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSBmdXJ0aGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJBZGRpdGlvbmFsIE1lZGljYXJlIFRheFwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkFkZGl0aW9uYWwgTWVkaWNhcmUgVGF4XCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+VGhhbmsgeW91IGZvciBpbmRpY2F0aW5nIHRoYXQgeW91ciBpbmNvbWUgbWF5IGV4Y2VlZCB0aGUgSVJTIHRocmVzaG9sZHMgZm9yIHRoZSBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBmb3IgeW91ciBmaWxpbmcgc3RhdHVzLiBJbiBvcmRlciB0byBhY2N1cmF0ZWx5IGFzc2VzcyBhbmQgcmVwb3J0IHRoaXMgb24geW91ciB0YXggcmV0dXJuLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5Db25maXJtYXRpb24gb2YgeW91ciBmaWxpbmcgc3RhdHVzIGZvciB0aGUgdGF4IHllYXIgKE1hcnJpZWQgRmlsaW5nIEpvaW50bHksIE1hcnJpZWQgRmlsaW5nIFNlcGFyYXRlbHksIFNpbmdsZSwgSGVhZCBvZiBIb3VzZWhvbGQsIFF1YWxpZnlpbmcgU3Vydml2aW5nIFNwb3VzZSkuPC9saT5cbiAgICAgIDxsaT5EZXRhaWxlZCBkb2N1bWVudGF0aW9uIG9mIGFsbCBzb3VyY2VzIG9mIGluY29tZSBmb3IgdGhlIHRheCB5ZWFyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlctMiBGb3JtcyBmcm9tIGFsbCBlbXBsb3llcnMuPC9saT5cbiAgICAgICAgICA8bGk+MTA5OSBGb3JtcyAoaWYgYXBwbGljYWJsZSksIGluY2x1ZGluZzpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgPGxpPjEwOTktTUlTQyBmb3IgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMuPC9saT5cbiAgICAgICAgICAgICAgPGxpPjEwOTktSU5UIGZvciBpbnRlcmVzdCBlYXJuaW5ncy48L2xpPlxuICAgICAgICAgICAgICA8bGk+MTA5OS1ESVYgZm9yIGRpdmlkZW5kcy48L2xpPlxuICAgICAgICAgICAgICA8bGk+QW55IG90aGVyIDEwOTkgZm9ybXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvZiBhbnkgb3RoZXIgaW5jb21lIChlLmcuLCBmb3JlaWduIGluY29tZSwgcmVudGFsIGluY29tZSkuPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+SW5mb3JtYXRpb24gb24gYW55IGRlZHVjdGlvbnMgb3IgZXhjbHVzaW9ucyB0byBpbmNvbWUgdGhhdCB5b3UgaW50ZW5kIHRvIGNsYWltIChlLmcuLCBJUkEgY29udHJpYnV0aW9ucywgc3R1ZGVudCBsb2FuIGludGVyZXN0KS48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+V2UgYWxzbyByZW1pbmQgeW91IHRoYXQgaWYgeW91IGFuZC9vciB5b3VyIHNwb3VzZSBhcmUgc2VsZi1lbXBsb3llZCwgYWRkaXRpb25hbCBkZXRhaWxzIHJlZ2FyZGluZyB5b3VyIGJ1c2luZXNzIGluY29tZSBhbmQgZXhwZW5zZXMgd2lsbCBiZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHlvdXIgbmV0IGVhcm5pbmdzIGFuZCBwb3RlbnRpYWwgQWRkaXRpb25hbCBNZWRpY2FyZSBUYXggb2JsaWdhdGlvbnMuPC9wPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMgYW5kIGFjY3VyYXRlbHkgY2FsY3VsYXRpbmcgYW55IHBvdGVudGlhbCBBZGRpdGlvbmFsIE1lZGljYXJlIFRheCBsaWFiaWxpdGllcy4gUGxlYXNlIHByb3ZpZGUgdGhlc2UgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJOYW5ueSBUYXhcIixcbiAgICBhY3Rpb25UaXRsZTogXCJOYW5ueSBUYXhcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgcHJlcGFyaW5nIHlvdXIgdGF4ZXMgYW5kIG5vdGVkIHRoYXQgeW91IGhhdmUgaW5kaWNhdGVkIGVtcGxveWluZyBob3VzZWhvbGQgaGVscCBzdWNoIGFzIGEgbmFubnksIGhvdXNla2VlcGVyLCBvciBnYXJkZW5lci4gVG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCB0aGUgc28tY2FsbGVkIFwiTmFubnkgVGF4XCIgcmVndWxhdGlvbnMsIHdlIGtpbmRseSByZXF1ZXN0IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPkNvbXBsZXRlIG5hbWUsIGFkZHJlc3MsIGFuZCBTb2NpYWwgU2VjdXJpdHkgTnVtYmVyIChTU04pIG9mIHRoZSBlbXBsb3llZS48L2xpPlxuICAgICAgICA8bGk+VG90YWwgYW1vdW50IHBhaWQgdG8gdGhlIGVtcGxveWVlIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgICAgPGxpPkFueSBhbW91bnRzIHdpdGhoZWxkIGZyb20gdGhlIGVtcGxveWVlJ3MgcGF5IGZvciB0YXhlcywgaW5jbHVkaW5nIEZlZGVyYWwgSW5jb21lIFRheCwgU29jaWFsIFNlY3VyaXR5LCBhbmQgTWVkaWNhcmUgVGF4ZXMuPC9saT5cbiAgICAgICAgPGxpPkNvcGllcyBvZiBhbnkgZW1wbG95bWVudCBjb250cmFjdHMgb3IgYWdyZWVtZW50cy48L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgYW55IGVtcGxveWVyIGNvbnRyaWJ1dGlvbnMgdG8gU29jaWFsIFNlY3VyaXR5LCBNZWRpY2FyZSwgYW5kIHdpdGhoZWxkIGluY29tZSB0YXhlcyAoaWYgYXBwbGljYWJsZSkuPC9saT5cbiAgICAgICAgPGxpPkRvY3VtZW50YXRpb24gdGhhdCBzdXBwb3J0cyB0aGUgZW1wbG95bWVudCBzdGF0dXMgKGUuZy4sIFNjaGVkdWxlIEggZm9ybSkuPC9saT5cbiAgICAgICAgPGxpPkFueSBvdGhlciByZWxldmFudCB0YXggZG9jdW1lbnRzIG9yIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIGVtcGxveW1lbnQuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGVseSByZXBvcnRpbmcgeW91ciB0YXggb2JsaWdhdGlvbnMgYW5kIHBvdGVudGlhbGx5IGF2b2lkaW5nIHBlbmFsdGllcyBmb3Igbm9uLWNvbXBsaWFuY2UuIFBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2Ugb3IgY29udGFjdCB1cyBpZiB5b3UgcmVxdWlyZSBhc3Npc3RhbmNlIGdhdGhlcmluZyB0aGlzIGluZm9ybWF0aW9uLjwvcD5cbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyIGFuZCBhcmUgaGVyZSB0byBoZWxwIHlvdSBuYXZpZ2F0ZSB0aHJvdWdoIHRoaXMgcHJvY2Vzcy48L3A+YCxcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBFYXJuZWQgSW5jb21lXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UgdW5kZXJzdGFuZCB0aGF0IHlvdSd2ZSBlYXJuZWQgaW5jb21lIGZyb20gZm9yZWlnbiBzb3VyY2VzIHRoaXMgcGFzdCB0YXggeWVhci4gVG8gYWNjdXJhdGVseSByZXBvcnQgdGhpcyBhbmQgcG90ZW50aWFsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIEZvcmVpZ24gRWFybmVkIEluY29tZSBFeGNsdXNpb24gb3IgY3JlZGl0LCB3ZSdsbCBuZWVkIHNwZWNpZmljIGRvY3VtZW50YXRpb24gYW5kIGluZm9ybWF0aW9uIGZyb20geW91LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nOjwvcD5cbiAgICA8b2w+XG4gICAgICAgIDxsaT5BIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGZvcmVpZ24gZWFybmVkIGluY29tZS4gVGhpcyBpbmNsdWRlcyBhbnkgd2FnZXMsIHNhbGFyaWVzLCBvciBvdGhlciBjb21wZW5zYXRpb24gcmVjZWl2ZWQgZnJvbSBzZXJ2aWNlcyBwZXJmb3JtZWQgd2hpbGUgbGl2aW5nIGFicm9hZC48L2xpPlxuICAgICAgICA8bGk+UHJvb2Ygb2YgeW91ciBmb3JlaWduIGVhcm5lZCBpbmNvbWUuIFRoaXMgY291bGQgYmUgaW4gdGhlIGZvcm0gb2YgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMgcmVmbGVjdGluZyBkaXJlY3QgZGVwb3NpdHMsIG9yIGVxdWl2YWxlbnQgZG9jdW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiB0aGUgY291bnRyeSBvciBjb3VudHJpZXMgaW4gd2hpY2ggeW91IGVhcm5lZCB0aGlzIGluY29tZS48L2xpPlxuICAgICAgICA8bGk+RGF0ZXMgb2YgeW91ciByZXNpZGVuY3kgaW4gZWFjaCBmb3JlaWduIGNvdW50cnkuPC9saT5cbiAgICAgICAgPGxpPkFueSB0YXggcmVzaWRlbmN5IGNlcnRpZmljYXRlcyBvciBzdGF0ZW1lbnRzIGZyb20gZm9yZWlnbiB0YXggYXV0aG9yaXRpZXMuPC9saT5cbiAgICAgICAgPGxpPkRldGFpbHMgb2YgYW55IGZvcmVpZ24gdGF4IHBhaWQsIGluY2x1ZGluZyB0YXggcmV0dXJucyBmaWxlZCBpbiB0aGUgZm9yZWlnbiBjb3VudHJ5LCBpZiBhdmFpbGFibGUuPC9saT5cbiAgICAgICAgPGxpPlJlY29yZHMgb2YgeW91ciBVLlMuIGFuZCBmb3JlaWduIGFkZHJlc3NlcyBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT5JbmZvcm1hdGlvbiBvbiBhbnkgdGF4IHRyZWF0aWVzIGJldHdlZW4gdGhlIFUuUy4gYW5kIHRoZSBjb3VudHJ5IG9yIGNvdW50cmllcyB5b3Ugd29ya2VkIGluLjwvbGk+XG4gICAgICAgIDxsaT5BIHNpZ25lZCBGb3JtIDI1NTUgb3IgMjU1NS1FWiwgaWYgeW91IGhhdmUgYWxyZWFkeSBwcmVwYXJlZCB0aGlzLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5UaGVzZSBkb2N1bWVudHMgYW5kIGRldGFpbHMgYXJlIGNydWNpYWwgZm9yIGRldGVybWluaW5nIHRoZSBiZXN0IGFwcHJvYWNoIHRvIGhhbmRsZSB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSBhbmQgcG90ZW50aWFsbHkgbWF4aW1pemUgeW91ciB0YXggYmVuZWZpdHMuPC9wPlxuICAgIDxwPlBsZWFzZSBoYXZlIHRoZXNlIG1hdGVyaWFscyByZWFkeSBhbmQgc2VuZCB0aGVtIHRvIHVzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24gb24gYW55IG9mIHRoZSBpdGVtcyByZXF1ZXN0ZWQsIGRvIG5vdCBoZXNpdGF0ZSB0byByZWFjaCBvdXQuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBXZSBsb29rIGZvcndhcmQgdG8gYXNzaXN0aW5nIHlvdSB3aXRoIHlvdXIgdGF4ZXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkZvcmVpZ24gSG91c2luZyBFeGNsdXNpb25cIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UndmUgbm90ZWQgdGhhdCB5b3UgaGF2ZSBhbnN3ZXJlZCA8c3Ryb25nPnllczwvc3Ryb25nPiB0byBpbmN1cnJpbmcgZWxpZ2libGUgZXhwZW5zZXMgZm9yIHRoZSBGb3JlaWduIEhvdXNpbmcgRXhjbHVzaW9uIGR1ZSB0byBlYXJuaW5nIGluY29tZSBpbiBhIGZvcmVpZ24gY291bnRyeSBkdXJpbmcgdGhpcyB0YXggeWVhci4gVG8gYWNjdXJhdGVseSBwcmVwYXJlIHlvdXIgdGF4IGRvY3VtZW50cyBhbmQgZW5zdXJlIHlvdSByZWNlaXZlIHRoZSBtYXhpbXVtIGV4Y2x1c2lvbiBwb3NzaWJsZSwgd2UgcmVxdWlyZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudHM6PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudDo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgY3VycmVudCBsZWFzZSBvciByZW50YWwgYWdyZWVtZW50LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlV0aWxpdHkgQmlsbHM6PC9zdHJvbmc+IENvcGllcyBvZiB1dGlsaXR5IGJpbGxzIGZvciB0aGUgdGF4IHllYXIgaW4gcXVlc3Rpb24gKGV4Y2x1ZGluZyB0ZWxlcGhvbmUgY2hhcmdlcykuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdXJhbmNlIERvY3VtZW50czo8L3N0cm9uZz4gRG9jdW1lbnRzIHByb3ZpbmcgcGF5bWVudCBvZiByZWFsIGVzdGF0ZSBvciByZW50YWwgaW5zdXJhbmNlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk90aGVyIEhvdXNpbmcgQ29zdHM6PC9zdHJvbmc+IFJlY2VpcHRzIG9yIGRvY3VtZW50YXRpb24gZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGhvdXNpbmcgY29zdHMgbm90IHByZXZpb3VzbHkgbWVudGlvbmVkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIEZvcmVpZ24gSW5jb21lOjwvc3Ryb25nPiBEb2N1bWVudGF0aW9uIHZlcmlmeWluZyB5b3VyIGZvcmVpZ24gZWFybmVkIGluY29tZSAoZS5nLiwgcGF5IHN0dWJzLCBiYW5rIHN0YXRlbWVudHMpLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkxvY2F0aW9uIGFuZCBEdXJhdGlvbjo8L3N0cm9uZz4gQSBicmllZiBzdGF0ZW1lbnQgZGV0YWlsaW5nIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGZvcmVpZ24gcmVzaWRlbmNlIGFuZCB0aGUgZHVyYXRpb24gb2YgeW91ciBzdGF5IGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgZG9jdW1lbnRzIGFyZSBjbGVhcmx5IGxlZ2libGUgYW5kIGluIGEgZm9ybWF0IHRoYXQgY2FuIGJlIGVhc2lseSBzaGFyZWQgZWxlY3Ryb25pY2FsbHkuIFRoZSBhY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZXNlIGRvY3VtZW50cyBhcmUgZXNzZW50aWFsIGZvciBhIGNvcnJlY3QgYW5kIG9wdGltaXplZCBmaWxpbmcgb2YgeW91ciB0YXggcmV0dXJuLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdGhlIEZvcmVpZ24gSG91c2luZyBFeGNsdXNpb24uPC9wPlxuICAgIDxwPklmIHlvdSBoYXZlIHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBvbiBhbnkgb2YgdGhlIHJlcXVpcmVkIGRvY3VtZW50cywgcGxlYXNlIGZlZWwgZnJlZSB0byBjb250YWN0IHVzIGF0IHlvdXIgY29udmVuaWVuY2UuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBIb3VzaW5nIERlZHVjdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgdGhhdCB5b3UgYW5zd2VyZWQgPHN0cm9uZz55ZXM8L3N0cm9uZz4gdG8gdGhlIHF1ZXN0aW9uIGNvbmNlcm5pbmcgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGUgPHN0cm9uZz5Gb3JlaWduIEhvdXNpbmcgRGVkdWN0aW9uPC9zdHJvbmc+LiBUaGlzIGRlZHVjdGlvbiBpcyBkZXNpZ25lZCB0byBoZWxwIG1pdGlnYXRlIHRoZSBoaWdoZXIgY29zdCBvZiBsaXZpbmcgYWJyb2FkIGJ5IGFsbG93aW5nIGNlcnRhaW4gaG91c2luZyBleHBlbnNlcyB0byBiZSBkZWR1Y3RlZCBmb3IgdGF4IHB1cnBvc2VzLjwvcD5cbiAgICA8cD5UbyBwcm9jZWVkIHdpdGggeW91ciB0YXggZmlsaW5nIGFuZCBlbnN1cmUgeW91IHJlY2VpdmUgdGhlIG1heGltdW0gYWxsb3dhYmxlIGRlZHVjdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRzIHJlbGF0ZWQgdG8geW91ciBob3VzaW5nIGV4cGVuc2VzIGluY3VycmVkIHdoaWxlIHdvcmtpbmcgYWJyb2FkOjwvcD5cbiAgICA8b2w+XG4gICAgPGxpPjxzdHJvbmc+UmVudGFsIEFncmVlbWVudC9MZWFzZTo8L3N0cm9uZz4gQSBjb3B5IG9mIHlvdXIgcmVudGFsIGFncmVlbWVudCBvciBsZWFzZSB0aGF0IHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIHJlbnQgcGFpZCBhbmQgdGhlIHBlcmlvZCBvZiBvY2N1cGFuY3kuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5VdGlsaXR5IEJpbGxzOjwvc3Ryb25nPiBDb3BpZXMgb2YgdXRpbGl0eSBiaWxscyBmb3IgdGhlIHBlcmlvZCB5b3UgYXJlIGNsYWltaW5nIHRoZSBkZWR1Y3Rpb24uIFRoaXMgaW5jbHVkZXMgZWxlY3RyaWNpdHksIHdhdGVyLCBhbmQgZ2FzLCBidXQgZXhjbHVkZXMgdGVsZXBob25lIGNoYXJnZXMuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5SZWFsIEVzdGF0ZSBJbnN1cmFuY2U6PC9zdHJvbmc+IERvY3VtZW50IHByb29mIG9mIGFueSByZWFsIGVzdGF0ZSBpbnN1cmFuY2UgcHJlbWl1bXMgcGFpZCBmb3IgeW91ciBmb3JlaWduIGhvdXNpbmcuPC9saT5cbiAgICA8bGk+PHN0cm9uZz5PdGhlciBFbGlnaWJsZSBFeHBlbnNlczo8L3N0cm9uZz4gUmVjZWlwdHMgb3IgaW52b2ljZXMgZm9yIGFueSBhZGRpdGlvbmFsIGVsaWdpYmxlIGxpdmluZyBleHBlbnNlcyBub3QgY292ZXJlZCBhYm92ZS4gUGxlYXNlIG5vdGUsIHRvIHF1YWxpZnksIHRoZXNlIGV4cGVuc2VzIG11c3QgYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB5b3VyIGZvcmVpZ24gaG91c2luZyBhbmQgbm90IGNvdmVyZWQgdW5kZXIgdGhlIGJhc2UgYW1vdW50IGV4ZW1wdGlvbi48L2xpPlxuICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gRWFybmVkIEluY29tZTo8L3N0cm9uZz4gVmVyaWZpY2F0aW9uIG9mIHlvdXIgZWFybmVkIGluY29tZSB3aGlsZSB3b3JraW5nIGFicm9hZCwgYXMgdGhlIGRlZHVjdGlvbiBpcyB0aWVkIHRvIGNlcnRhaW4gaW5jb21lIGxpbWl0YXRpb25zLjwvbGk+XG4gICAgPC9vbD5cbiAgICA8cD5XZSB1bmRlcnN0YW5kIHRoaXMgbWF5IGludm9sdmUgZ2F0aGVyaW5nIHNldmVyYWwgZG9jdW1lbnRzLCBidXQgZW5zdXJpbmcgd2UgaGF2ZSBhY2N1cmF0ZSBhbmQgY29tcGxldGUgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgbWF4aW1pemluZyB5b3VyIHBvdGVudGlhbCBkZWR1Y3Rpb25zIGFuZCByZW1haW5pbmcgY29tcGxpYW50IHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2Ugc3VibWl0IHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIG9yIGNvbnRhY3QgdXMgdG8gZGlzY3VzcyBhbnkgY2hhbGxlbmdlcyB5b3UgbWF5IGZhY2UgaW4gb2J0YWluaW5nIHRoZW0uIE91ciB0ZWFtIGlzIGhlcmUgdG8gc3VwcG9ydCB5b3UgdGhyb3VnaCB0aGlzIHByb2Nlc3MuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25UaXRsZTogXCJGb3JlaWduIFRheCBDcmVkaXRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgcmVhY2hpbmcgb3V0IHRvIGdhdGhlciBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNsYWltaW5nIHlvdXIgRm9yZWlnbiBUYXggQ3JlZGl0LCBhcyBpbmRpY2F0ZWQgYnkgeW91ciBhZmZpcm1hdGl2ZSByZXNwb25zZSBpbmRpY2F0aW5nIHRoYXQgeW91IHBhaWQgdGF4ZXMgdG8gYSBmb3JlaWduIGNvdW50cnkgb24gZWFybmVkIGluY29tZSB0aGVyZS4gVG8gcHJvcGVybHkgY2FsY3VsYXRlIGFuZCBhcHBseSB0aGlzIGNyZWRpdCB0byB5b3VyIFUuUy4gdGF4IHJldHVybiwgd2Ugd2lsbCBuZWVkIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbjo8L3A+XG4gICAgPG9sPlxuICAgICAgICA8bGk+PHN0cm9uZz5FYXJuZWQgSW5jb21lIERvY3VtZW50YXRpb246PC9zdHJvbmc+IFBsZWFzZSBwcm92aWRlIGFueSBkb2N1bWVudHMgdGhhdCB2ZXJpZnkgdGhlIGFtb3VudCBvZiBpbmNvbWUgZWFybmVkIGluIHRoZSBmb3JlaWduIGNvdW50cnkuIFRoaXMgbWF5IGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgcGF5IHN0dWJzLCBXLTIgZm9ybXMgZnJvbSBmb3JlaWduIGVtcGxveWVycywgb3IgYW55IG9mZmljaWFsIGluY29tZSBzdGF0ZW1lbnRzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFRheCBQYWlkOjwvc3Ryb25nPiBUbyBjbGFpbSB0aGUgRm9yZWlnbiBUYXggQ3JlZGl0LCBkb2N1bWVudGF0aW9uIHNob3dpbmcgdGhlIGFtb3VudCBvZiB0YXggcGFpZCB0byB0aGUgZm9yZWlnbiBnb3Zlcm5tZW50IGlzIHJlcXVpcmVkLiBBY2NlcHRhYmxlIGZvcm1zIG9mIGV2aWRlbmNlIGluY2x1ZGUgZm9yZWlnbiB0YXggcmV0dXJuKHMpLCB3aXRoaG9sZGluZyBzdGF0ZW1lbnRzLCBvciBhbnkgb2ZmaWNpYWwgdGF4IHJlY2VpcHRzIHByb3ZpZGVkIGJ5IHRoZSBmb3JlaWduIHRheCBhdXRob3JpdHkuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+VGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyOjwvc3Ryb25nPiBZb3VyIFNvY2lhbCBTZWN1cml0eSBOdW1iZXIgb3IgVGF4cGF5ZXIgSWRlbnRpZmljYXRpb24gTnVtYmVyLCBmb3IgYWNjdXJhdGUgcHJvY2Vzc2luZyBvZiB0aGUgdGF4IGNyZWRpdC48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5EZXRhaWxzIG9mIHRoZSBGb3JlaWduIFRheDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHR5cGUgb2YgdGF4IHBhaWQgdG8gdGhlIGZvcmVpZ24gY291bnRyeSAoaW5jb21lIHRheCwgc2FsZXMgdGF4LCBldGMuKSwgaW5jbHVkaW5nIHdoZXRoZXIgaXQgd2FzIGEgZmVkZXJhbCwgc3RhdGUvcHJvdmluY2lhbCwgb3IgbG9jYWwgdGF4LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlByb29mIG9mIFJlc2lkZW5jeSAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdXIgY2xhaW0gZGVwZW5kcyBvbiByZXNpZGVuY3kgc3RhdHVzIGluIHRoZSBmb3JlaWduIGNvdW50cnksIHBsZWFzZSBwcm92aWRlIHByb29mIG9mIHJlc2lkZW5jeSBmb3IgdGhlIHJlbGV2YW50IHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkZvcmVpZ24gQWRkcmVzcyAoSWYgQXBwbGljYWJsZSk6PC9zdHJvbmc+IElmIHlvdSBtYWludGFpbmVkIGEgcmVzaWRlbmNlIG91dHNpZGUgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgZHVyaW5nIHRoZSB0YXggeWVhciwgcGxlYXNlIHByb3ZpZGUgdGhlIGFkZHJlc3MuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGVuc3VyaW5nIHlvdXIgdGF4IHJldHVybnMgYXJlIGFzIGJlbmVmaWNpYWwgdG8geW91ciBzaXR1YXRpb24gYXMgYWxsb3dlZCBieSBsYXcgYW5kIGZvciBwcmV2ZW50aW5nIGFueSB1bm5lY2Vzc2FyeSBkZWxheXMuPC9wPlxuICAgIDxwPlBsZWFzZSB1cGxvYWQgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiB0byBvdXIgc2VjdXJlIGNsaWVudCBwb3J0YWwgb3IgZW1haWwgaXQgdG8gdXMgYXQgdGF4QGxlbmRhaGFuZGFjY291bnRpbmcuY29tIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2UuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPlRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJUcmFkaXRpb25hbCBJUkEgQ29udHJpYnV0aW9uXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiVHJhZGl0aW9uYWwgSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBwcmVwYXJpbmcgeW91ciB0YXggZG9jdW1lbnRzIGFuZCBoYXZlIG5vdGVkIHlvdXIgaW5kaWNhdGlvbiBvZiBtYWtpbmcgY29udHJpYnV0aW9ucyB0byBhIFRyYWRpdGlvbmFsIElSQSBkdXJpbmcgdGhlIGxhc3QgdGF4IHllYXIuIFRvIGVuc3VyZSBhY2N1cmF0ZSBhbmQgYmVuZWZpY2lhbCB0YXggZmlsaW5nLCB3ZSByZXF1aXJlIHRoZSBmb2xsb3dpbmcgZGV0YWlscyBhYm91dCB5b3VyIFRyYWRpdGlvbmFsIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9ucyB5b3UgbWF5IGhhdmUgdGFrZW46PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT5UaGUgdG90YWwgYW1vdW50IGNvbnRyaWJ1dGVkIHRvIHRoZSBUcmFkaXRpb25hbCBJUkEgZHVyaW5nIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgPGxpPkRhdGVzIG9mIGNvbnRyaWJ1dGlvbnMgdG8gYWNjdXJhdGVseSByZXBvcnQgd2l0aGluIHRoZSB0YXggeWVhci48L2xpPlxuICAgICAgPGxpPkRvY3VtZW50YXRpb24gb3Igc3RhdGVtZW50cyBmcm9tIHlvdXIgSVJBIGN1c3RvZGlhbiBzcGVjaWZ5aW5nIHRoZSBjb250cmlidXRpb25zIG1hZGUuPC9saT5cbiAgICAgIDxsaT5BbnkgZGlzdHJpYnV0aW9ucyB0YWtlbiBmcm9tIHlvdXIgVHJhZGl0aW9uYWwgSVJBIGR1cmluZyB0aGUgdGF4IHllYXIsIGluY2x1ZGluZzpcbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaT5BbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cbiAgICAgICAgICA8bGk+RGF0ZXMgb2YgZWFjaCBkaXN0cmlidXRpb24uPC9saT5cbiAgICAgICAgICA8bGk+RG9jdW1lbnRhdGlvbiBvciBzdGF0ZW1lbnRzIGZyb20geW91ciBJUkEgY3VzdG9kaWFuIGZvciB0aGVzZSBkaXN0cmlidXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPllvdXIgeWVhci1lbmQgSVJBIHN0YXRlbWVudCBmb3IgdGhlIHRheCB5ZWFyIGluIHF1ZXN0aW9uLjwvbGk+XG4gICAgICA8bGk+QW55IG5vdGljZXMgcmVjZWl2ZWQgcmVnYXJkaW5nIG5vbi1kZWR1Y3RpYmxlIGNvbnRyaWJ1dGlvbnMsIGlmIGFwcGxpY2FibGUuPC9saT5cbiAgICA8L29sPlxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGRldGVybWluaW5nIHlvdXIgdGF4IGxpYWJpbGl0aWVzIG9yIGJlbmVmaXRzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIElSQSBjb250cmlidXRpb25zLCBhbmQgZm9yIGVuc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVJTIHJ1bGVzIGFuZCByZWd1bGF0aW9ucy4gPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZXNlIGRvY3VtZW50cyBhdCB5b3VyIGVhcmxpZXN0IGNvbnZlbmllbmNlIHRvIGZhY2lsaXRhdGUgdGhlIHRpbWVseSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IGZpbGluZy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGZ1cnRoZXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgZG8gbm90IGhlc2l0YXRlIHRvIHJlYWNoIG91dC48cD5cbiAgICA8cD5UaGFuayB5b3UgZm9yIHlvdXIgcHJvbXB0IGF0dGVudGlvbiB0byB0aGlzIHJlcXVlc3QuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIlJvdGggSVJBIENvbnRyaWJ1dGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPldlIGhhdmUgbm90ZWQgeW91ciBjb250cmlidXRpb25zIHRvIGEgUm90aCBJUkEgZHVyaW5nIHRoZSBsYXN0IHRheCB5ZWFyIGFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLiBUbyBlbnN1cmUgd2UgYWNjdXJhdGVseSBjYXB0dXJlIGFsbCByZWxldmFudCB0YXggaW5mb3JtYXRpb24gYW5kIHBvdGVudGlhbGx5IG9wdGltaXplIHlvdXIgdGF4IHNpdHVhdGlvbiwgd2Uga2luZGx5IHJlcXVlc3QgdGhlIGZvbGxvd2luZyBzcGVjaWZpY3MgYWJvdXQgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIGFuZCBhbnkgZGlzdHJpYnV0aW9uczo8L3A+XG4gICAgPG9sPlxuICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgY29udHJpYnV0ZWQgdG8gdGhlIFJvdGggSVJBIGR1cmluZyB0aGUgdGF4IHllYXIuPC9saT5cbiAgICAgIDxsaT5UaGUgZGF0ZXMgb24gd2hpY2ggdGhlc2UgY29udHJpYnV0aW9ucyB3ZXJlIG1hZGUuPC9saT5cbiAgICAgIDxsaT5PZmZpY2lhbCBzdGF0ZW1lbnRzIG9yIGRvY3VtZW50YXRpb24gZnJvbSB5b3VyIElSQSBjdXN0b2RpYW4gdGhhdCBkZXRhaWwgdGhlc2UgY29udHJpYnV0aW9ucy48L2xpPlxuICAgICAgPGxpPkluZm9ybWF0aW9uIG9uIGFueSBkaXN0cmlidXRpb25zLCBzaG91bGQgdGhleSBhcHBseSwgaW5jbHVkaW5nOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPlRoZSB0b3RhbCBhbW91bnQgb2YgZWFjaCBkaXN0cmlidXRpb24gdGFrZW4gZnJvbSB0aGUgUm90aCBJUkEuPC9saT5cbiAgICAgICAgICA8bGk+VGhlIGRhdGVzIG9mIHRoZXNlIGRpc3RyaWJ1dGlvbnMuPC9saT5cbiAgICAgICAgICA8bGk+RGlzdHJpYnV0aW9uIHN0YXRlbWVudHMgb3IgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBmcm9tIHlvdXIgSVJBIGN1c3RvZGlhbi48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5Zb3VyIHllYXItZW5kIGFjY291bnQgc3RhdGVtZW50IGZvciB0aGUgUm90aCBJUkEgZm9yIHRoZSB0YXggeWVhciBpbiBxdWVzdGlvbi48L2xpPlxuICAgICAgPGxpPkFueSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24gb3Igbm90aWNlcyByZWdhcmRpbmcgeW91ciBSb3RoIElSQSBjb250cmlidXRpb25zIG9yIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZyB0YXggcmVwb3J0aW5nIGZvcm1zIGxpa2UgRm9ybSA1NDk4IG9yIEZvcm0gMTA5OS1SLCBpZiByZWNlaXZlZC48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+R2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24gaXMgdml0YWwgZm9yIGEgY29tcHJlaGVuc2l2ZSBhbmFseXNpcyBvZiB5b3VyIHRheCBzaXR1YXRpb24sIGVuc3VyaW5nIHRoZSBjb3JyZWN0IHRyZWF0bWVudCBvZiB5b3VyIFJvdGggSVJBIGNvbnRyaWJ1dGlvbnMgYW5kIGFueSBkaXN0cmlidXRpb25zLCBhbmQgY29tcGx5aW5nIHdpdGggSVJTIHJlZ3VsYXRpb25zLjwvcD5cbiAgICA8cD5QbGVhc2UgZm9yd2FyZCB0aGUgcmVxdWVzdGVkIGRvY3VtZW50YXRpb24gYXQgeW91ciBlYXJsaWVzdCBjb252ZW5pZW5jZSB0byBlbnN1cmUgYSBzbW9vdGggYW5kIGVmZmljaWVudCB0YXggcHJlcGFyYXRpb24gcHJvY2Vzcy4gU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVyaWVzIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBvYnRhaW5pbmcgdGhlc2UgZG9jdW1lbnRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPlxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBjb29wZXJhdGlvbiBhbmQgcHJvbXB0IHJlc3BvbnNlLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEFzc2V0c1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIkZvcmVpZ24gQXNzZXRzXCIsXG4gICAgYWN0aW9uSW5zdHJ1Y3Rpb25zOiBgPHA+V2UncmUgbWFraW5nIHByb2dyZXNzIG9uIHlvdXIgdGF4IHJldHVybiwgYW5kIGJhc2VkIG9uIHlvdXIgcmVzcG9uc2UgaW5kaWNhdGluZyBvd25lcnNoaXAgb3IgZmluYW5jaWFsIGludGVyZXN0IGluIGZvcmVpZ24gYXNzZXRzLCBhZGRpdGlvbmFsIGRldGFpbHMgYXJlIG5lY2Vzc2FyeS4gVGhlc2UgZGV0YWlscyBhcmUgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgcmVwb3J0aW5nIGFuZCBjb21wbGlhbmNlIHdpdGggdGhlIEZvcmVpZ24gQWNjb3VudCBUYXggQ29tcGxpYW5jZSBBY3QgKEZBVENBKSBhbmQgUmVwb3J0IG9mIEZvcmVpZ24gQmFuayBhbmQgRmluYW5jaWFsIEFjY291bnRzIChGQkFSKSByZXF1aXJlbWVudHMuPC9wPlxuICAgIDxwPlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246PC9wPlxuICAgIDxvbD5cbiAgICAgICAgPGxpPjxzdHJvbmc+QWNjb3VudCBTdGF0ZW1lbnRzOjwvc3Ryb25nPiBDb3BpZXMgb2YgYWxsIHN0YXRlbWVudHMgZnJvbSBmb3JlaWduIGJhbmtzLCBtdXR1YWwgZnVuZHMsIG9yIHNlY3VyaXRpZXMgYWNjb3VudHMuIFRoaXMgaW5jbHVkZXMgYW55dGhpbmcgd2l0aCBhbiBhZ2dyZWdhdGUgdmFsdWUgb3ZlciAkMTAsMDAwIGF0IGFueSBwb2ludCBkdXJpbmcgdGhlIHRheCB5ZWFyLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkFjY291bnQgTnVtYmVyczo8L3N0cm9uZz4gVGhlIGFjY291bnQgbnVtYmVycyBmb3IgYWxsIGFwcGxpY2FibGUgYWNjb3VudHMuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5zdGl0dXRpb24gTmFtZXM6PC9zdHJvbmc+IFRoZSBuYW1lcyBhbmQgYWRkcmVzc2VzIG9mIHRoZSBmaW5hbmNpYWwgaW5zdGl0dXRpb25zIHdoZXJlIHRoZXNlIGFjY291bnRzIGFyZSBoZWxkLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPk1heGltdW0gVmFsdWVzOjwvc3Ryb25nPiBUaGUgbWF4aW11bSB2YWx1ZSBvZiBlYWNoIGFjY291bnQgZHVyaW5nIHRoZSB0YXggeWVhciwgY29udmVydGVkIHRvIFVTRCB1c2luZyB0aGUgZW5kLW9mLXllYXIgZXhjaGFuZ2UgcmF0ZS48L2xpPlxuICAgICAgICA8bGk+PHN0cm9uZz5Pd25lcnNoaXAgRGV0YWlsczo8L3N0cm9uZz4gQ2xhcmlmaWNhdGlvbiBvbiB0aGUgdHlwZSBvZiBvd25lcnNoaXAgKGluZGl2aWR1YWwsIGpvaW50LCBldGMuKSBhbmQgdGhlIHBlcmNlbnRhZ2Ugb2Ygb3duZXJzaGlwIGlmIG5vdCBzb2xlbHkgb3duZWQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29udGFjdCBJbmZvcm1hdGlvbjo8L3N0cm9uZz4gSWYgbWFuYWdlZCBieSBhIGZpbmFuY2lhbCBhZHZpc29yIG9yIGluc3RpdHV0aW9uLCBwcm92aWRlIHRoZWlyIGNvbnRhY3QgaW5mb3JtYXRpb24uPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+SW5jb21lIEdlbmVyYXRlZDo8L3N0cm9uZz4gSW5mb3JtYXRpb24gb24gYW55IGluY29tZSBnZW5lcmF0ZWQgZnJvbSB0aGVzZSBhc3NldHMsIHN1Y2ggYXMgaW50ZXJlc3QsIGRpdmlkZW5kcywgb3IgY2FwaXRhbCBnYWlucy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBpbXBlcmF0aXZlIHRvIGVuc3VyZSBmdWxsIGNvbXBsaWFuY2UgYW5kIG1pdGlnYXRlIGFueSByaXNrcyBvZiBwZW5hbHRpZXMuIEtpbmRseSBzZW5kIHRoZSByZXF1ZXN0ZWQgZG9jdW1lbnRzIGFuZCBpbmZvcm1hdGlvbiBhcyBzb29uIGFzIHBvc3NpYmxlLCB0byBhbGxvdyBhbXBsZSB0aW1lIGZvciBwcm9wZXIgZmlsaW5nLjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIGNvbnRhY3QgdXMuIFRoYW5rIHlvdSBmb3IgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJGb3JlaWduIEdpZnRzXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiRm9yZWlnbiBHaWZ0c1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkFzIHBhcnQgb2Ygb3VyIHRheCBwcmVwYXJhdGlvbiBwcm9jZXNzLCB3ZSd2ZSBub3RlZCB0aGF0IHlvdSBpbmRpY2F0ZWQgcmVjZWl2aW5nIGdpZnRzIG9yIGJlcXVlc3RzIGZyb20gZm9yZWlnbiBlbnRpdGllcyB0aGF0IGV4Y2VlZCB0aGUgJDEwMCwwMDAgdGhyZXNob2xkIGR1cmluZyB0aGUgdGF4IHllYXIuIFRvIGFjY3VyYXRlbHkgcmVwb3J0IHRoZXNlIG9uIHlvdXIgdGF4IHJldHVybiBhbmQgZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aCBJUlMgcmVndWxhdGlvbnMsIHdlIHJlcXVpcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi48L3A+XG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzIGF0IHlvdXIgZWFybGllc3QgY29udmVuaWVuY2U6PC9wPlxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPkNvbXBsZXRlIGxpc3Qgb2YgZm9yZWlnbiBnaWZ0cyBvciBiZXF1ZXN0cyByZWNlaXZlZDo8L3N0cm9uZz4gUGxlYXNlIHByb3ZpZGUgZGV0YWlscyBmb3IgZWFjaCBnaWZ0IG9yIGJlcXVlc3QsIGluY2x1ZGluZyB0aGUgZGF0ZSByZWNlaXZlZCBhbmQgdGhlIGV4YWN0IGFtb3VudCBpbiBVU0QgKFUuUy4gRG9sbGFycykuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRvbm9yIEluZm9ybWF0aW9uOjwvc3Ryb25nPiBGb3IgZWFjaCBnaWZ0IHJlY2VpdmVkLCBwcm92aWRlIHRoZSBkb25vcidzIGZ1bGwgbmFtZSwgYWRkcmVzcywgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcCB0byB5b3UuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlNvdXJjZSBvZiBHaWZ0Ojwvc3Ryb25nPiBEZXRhaWwgdGhlIHNvdXJjZSBvZiBlYWNoIGdpZnQsIGluY2x1ZGluZyB3aGV0aGVyIGl0IG9yaWdpbmF0ZWQgZnJvbSBhbiBpbmRpdmlkdWFsLCBlc3RhdGUsIGZvcmVpZ24gY29ycG9yYXRpb24sIG9yIHBhcnRuZXJzaGlwLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Gb3JlaWduIENvdW50cnkgSW5mb3JtYXRpb246PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGNvdW50cnkgZnJvbSB3aGljaCBlYWNoIGdpZnQgb3IgYmVxdWVzdCB3YXMgcmVjZWl2ZWQuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkRvY3VtZW50YXRpb246PC9zdHJvbmc+IEF0dGFjaCBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBzdWNoIGFzIGJhbmsgc3RhdGVtZW50cywgZm9yZWlnbiBnaWZ0IGRlY2xhcmF0aW9uIGZvcm1zLCBvciBsZWdhbCBkb2N1bWVudHMgcmVsYXRlZCB0byB0aGUgcmVjZWlwdCBvZiB0aGVzZSBnaWZ0cy48L2xpPlxuICAgIDwvb2w+XG4gICAgPHA+VGhpcyBpbmZvcm1hdGlvbiBpcyBjcnVjaWFsIHRvIGZ1bGZpbGwgb3VyIG9ibGlnYXRpb25zIGFuZCBlbnN1cmUgdGhlIGNvcnJlY3RuZXNzIG9mIHlvdXIgdGF4IGZpbGluZ3MuIEZhaWx1cmUgdG8gcmVwb3J0IGZvcmVpZ24gZ2lmdHMgb3IgYmVxdWVzdHMgYWNjdXJhdGVseSBjYW4gcmVzdWx0IGluIHBlbmFsdGllcy4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyByZXF1ZXN0LjwvcD5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgYXNzaXN0YW5jZSBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJEZXByZWNpYWJsZSBBc3NldHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSBiZWdpbiBwcmVwYXJpbmcgeW91ciB0YXggcmV0dXJuLCB3ZSBuZWVkIHlvdXIgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBkZXByZWNpYWJsZSBhc3NldHMuIFRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBhY2N1cmF0ZWx5IGNhbGN1bGF0aW5nIGRlcHJlY2lhdGlvbiBleHBlbnNlIGFuZCBlbnN1cmluZyBjb21wbGlhbmNlIHdpdGggdGF4IHJlZ3VsYXRpb25zLjwvcD5cblxuICAgIDxoMj5BY3Rpb24gSXRlbTo8L2gyPlxuICAgIDxwPlBsZWFzZSBhY2Nlc3MgeW91ciA8c3Ryb25nPnNlY3VyZSBjbGllbnQgdXBsb2FkIHBvcnRhbDwvc3Ryb25nPiBhbmQgbmF2aWdhdGUgdG8gdGhlIGZvbGxvd2luZyBwYXRoOiA8Y29kZT50YXhlcy9bQ1VSUkVOVCBUQVggWUVBUl0vRGVwcmVjaWF0aW9uL0Fzc2V0cy54bHN4PC9jb2RlPi4gWW91IHdpbGwgZmluZCBhIHNwcmVhZHNoZWV0IHRpdGxlZCBcIjxzdHJvbmc+RGVwcmVjaWFibGUgQXNzZXRzPC9zdHJvbmc+LlwiIFdlIGtpbmRseSByZXF1ZXN0IHRoYXQgeW91IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkZXByZWNpYWJsZSBhc3NldCBpbiB5b3VyIGJ1c2luZXNzOjwvcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBQcm92aWRlIGEgYnJpZWYgZGVzY3JpcHRpb24gdGhhdCBjbGVhcmx5IGlkZW50aWZpZXMgdGhlIGFzc2V0LjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkRhdGUgQWNxdWlyZWQ6PC9zdHJvbmc+IFNwZWNpZnkgdGhlIGRhdGUgeW91IHB1cmNoYXNlZCBvciBhY3F1aXJlZCB0aGUgYXNzZXQuPC9saT5cbiAgICAgICAgPGxpPjxzdHJvbmc+Q29zdCAvIEJhc2lzOjwvc3Ryb25nPiBJbmRpY2F0ZSB0aGUgb3JpZ2luYWwgY29zdCBvZiB0aGUgYXNzZXQgb3IgdGhlIGFkanVzdGVkIGJhc2lzIGlmIGRlcHJlY2lhdGlvbiBoYXMgYmVlbiBjbGFpbWVkIGluIHByZXZpb3VzIHllYXJzLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPkJ1c2luZXNzICUgVXNlOjwvc3Ryb25nPiBFc3RpbWF0ZSB0aGUgcGVyY2VudGFnZSBvZiB0aW1lIHRoZSBhc3NldCBpcyB1c2VkIGZvciBidXNpbmVzcyBwdXJwb3NlcyB2ZXJzdXMgcGVyc29uYWwgdXNlLjwvbGk+XG4gICAgICAgIDxsaT48c3Ryb25nPlVzZWQgUHJvcGVydHk6PC9zdHJvbmc+IEluZGljYXRlIHdoZXRoZXIgdGhlIGFzc2V0IHdhcyBwdXJjaGFzZWQgbmV3IG9yIHVzZWQuPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPGgzPkltcG9ydGFudCBOb3RlIG9uIFNhZmUtSGFyYm9yIEV4cGVuc2luZzo8L2gzPlxuICAgIDxwPlBsZWFzZSBiZSBhd2FyZSB0aGF0IHVuZGVyIHRoZSBzYWZlLWhhcmJvciA8ZW0+ZGUgbWluaW1pczwvZW0+IGV4cGVuc2luZyBydWxlLCB5b3UgY2FuIGltbWVkaWF0ZWx5IGV4cGVuc2UgdGhlIGNvc3Qgb2YgYW55IGluZGl2aWR1YWwgYXNzZXQgdGhhdCBjb3N0cyBsZXNzIHRoYW4gJDIsNTAwLCBwcm92aWRlZCB5b3UgZG8gbm90IGhhdmUgYW4gQXBwbGljYWJsZSBGaW5hbmNpYWwgU3RhdGVtZW50IChBRlMpLiBJZiBhbiBhc3NldCBtZWV0cyB0aGlzIGNyaXRlcmlvbiwgeW91IGRvIG5vdCBuZWVkIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHNwcmVhZHNoZWV0LjwvcD5cblxuICAgIDxwPldlIGVuY291cmFnZSB5b3UgdG8gYmUgYXMgY29tcHJlaGVuc2l2ZSBhcyBwb3NzaWJsZSB3aGVuIGxpc3RpbmcgeW91ciBhc3NldHMuIElmIHlvdSBhcmUgdW5zdXJlIHdoZXRoZXIgYW4gaXRlbSBzaG91bGQgYmUgaW5jbHVkZWQsIHBsZWFzZSBwcm92aWRlIHRoZSBkZXRhaWxzLCBhbmQgd2Ugd2lsbCBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHRyZWF0bWVudC48L3A+XG5cbiAgICA8cD5JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBwbGVhc2UgZG8gbm90IGhlc2l0YXRlIHRvIDxzdHJvbmc+Y29udGFjdCB1czwvc3Ryb25nPi4gV2UgYXBwcmVjaWF0ZSB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIgYW5kIGxvb2sgZm9yd2FyZCB0byB3b3JraW5nIHdpdGggeW91IHRvIGVuc3VyZSB0aGUgYWNjdXJhY3kgYW5kIGNvbXBsZXRlbmVzcyBvZiB5b3VyIHRheCByZXR1cm4uPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxuICAgIGFjdGlvblRpdGxlOiBcIlBhc3NpdmUgQnVzaW5lc3MgQWN0aXZpdGllc1wiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPkluIG9yZGVyIHRvIGFjY3VyYXRlbHkgcHJlcGFyZSB5b3VyIHRheCByZXR1cm5zIGFuZCBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIElSUyByZWd1bGF0aW9ucywgd2UgcmVxdWlyZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFzc2l2ZSBhY3Rpdml0aWVzIHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi4gUGFzc2l2ZSBhY3Rpdml0aWVzIGdlbmVyYWxseSBpbnZvbHZlIGJ1c2luZXNzIG9yIHRyYWRlIGFjdGl2aXRpZXMgaW4gd2hpY2ggeW91IGRvIG5vdCBtYXRlcmlhbGx5IHBhcnRpY2lwYXRlLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGFjdGl2aXRpZXMgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIHRheCByZXBvcnRpbmcgYW5kIHBvdGVudGlhbCB0YXggYmVuZWZpdHMuPC9wPlxuXG4gICAgPHA+UGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpZiB5b3UgYmVsaWV2ZSB3ZSBkbyBub3QgYWxyZWFkeSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiB5b3VyIGJ1c2luZXNzIGZpbmFuY2lhbHM6PC9wPlxuICAgIFxuICAgIDxvbD5cbiAgICAgIDxsaT48c3Ryb25nPk5hbWVzIGFuZCBEZXNjcmlwdGlvbnM6PC9zdHJvbmc+IEEgbGlzdCBhbmQgYnJpZWYgZGVzY3JpcHRpb24gb2YgZWFjaCBwYXNzaXZlIGFjdGl2aXR5IHlvdXIgYnVzaW5lc3MgaXMgZW5nYWdlZCBpbi48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RmluYW5jaWFsIFN0YXRlbWVudHM6PC9zdHJvbmc+SWYgbm90IGFscmVhZHkgaW4geW91ciBidXNpbmVzcyBmaW5hbmNpYWxzLCBQcm9maXQgYW5kIGxvc3Mgc3RhdGVtZW50cyBmb3IgZWFjaCBwYXNzaXZlIGFjdGl2aXR5LCBkZXRhaWxpbmcgaW5jb21lIGFuZCBleHBlbnNlcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T3duZXJzaGlwIFN0cnVjdHVyZTo8L3N0cm9uZz4gRG9jdW1lbnRhdGlvbiBvdXRsaW5pbmcgeW91ciBvd25lcnNoaXAgaW50ZXJlc3QgaW4gZWFjaCBhY3Rpdml0eSwgaW5jbHVkaW5nIGFueSBqb2ludCB2ZW50dXJlcyBvciBwYXJ0bmVyc2hpcHMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlJlbnRhbCBQcm9wZXJ0aWVzIChpZiBhcHBsaWNhYmxlKTo8L3N0cm9uZz4gSWYgYW55IHBhc3NpdmUgYWN0aXZpdGllcyBpbmNsdWRlIHJlbnRhbCBwcm9wZXJ0aWVzLCBwbGVhc2UgcHJvdmlkZSB0aGUgYWRkcmVzc2VzLCBsZWFzZSBhZ3JlZW1lbnRzLCBhbmQgYSBzY2hlZHVsZSBvZiByZW50cyBjb2xsZWN0ZWQgYW5kIGV4cGVuc2VzIGluY3VycmVkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5Mb2cgb2YgUGVyc29uYWwgSW52b2x2ZW1lbnQ6PC9zdHJvbmc+IEZvciBlYWNoIGFjdGl2aXR5LCBhIGxvZyBvciByZWNvcmQgb2YgeW91ciBwZXJzb25hbCBpbnZvbHZlbWVudCBvciBwYXJ0aWNpcGF0aW9uIG92ZXIgdGhlIHRheCB5ZWFyLCB0byBzdWJzdGFudGlhdGUgdGhlIGV4dGVudCBvZiB5b3VyIG1hdGVyaWFsIHBhcnRpY2lwYXRpb24uPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPlByaW9yIFllYXIgTG9zc2VzOjwvc3Ryb25nPiBJbmZvcm1hdGlvbiBvbiBhbnkgbG9zc2VzIGZyb20gdGhlc2UgYWN0aXZpdGllcyBjYXJyaWVkIG92ZXIgZnJvbSBwcmV2aW91cyB0YXggeWVhcnMuPC9saT5cbiAgICA8L29sPlxuICAgIFxuICAgIDxwPlRoaXMgaW5mb3JtYXRpb24gaXMgcGl2b3RhbCBmb3IgYXNzZXNzaW5nIHlvdXIgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzZXMgYW5kIGNvcnJlY3RseSBhcHBseWluZyB0aGVtIGFnYWluc3QgeW91ciBwYXNzaXZlIGFjdGl2aXR5IGluY29tZSwgaW4gbGluZSB3aXRoIHRoZSBJUlMgcGFzc2l2ZSBhY3Rpdml0eSBsb3NzIHJ1bGVzLjwvcD5cbiAgICBcbiAgICA8cD5XZSBhcHByZWNpYXRlIHlvdXIgY29vcGVyYXRpb24gYW5kIHByb21wdCByZXNwb25zZSB0byB0aGlzIHJlcXVlc3QuIFNob3VsZCB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIHJlcXVpcmUgYXNzaXN0YW5jZSBpbiBnYXRoZXJpbmcgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIGRvIG5vdCBoZXNpdGF0ZSB0byBjb250YWN0IHVzLjwvcD5gLFxuICB9LFxuICB7XG4gICAgYWN0aW9uVGF4U3ViamVjdDogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJHZW5lcmFsIEJ1c2luZXNzIENyZWRpdHNcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5XZSBhcmUgZXhwbG9yaW5nIG9wcG9ydHVuaXRpZXMgdG8gb3B0aW1pemUgeW91ciB0YXggYmVuZWZpdHMgdGhyb3VnaCB2YXJpb3VzIGdlbmVyYWwgYnVzaW5lc3MgY3JlZGl0cy4gVGhlc2UgY3JlZGl0cyBhcmUgZGVzaWduZWQgdG8gZW5jb3VyYWdlIGNlcnRhaW4gYnVzaW5lc3MgYWN0aXZpdGllcyB0aGF0IG1lZXQgdGhlIGdvYWxzIGFuZCBwb2xpY2llcyBlc3RhYmxpc2hlZCBieSB0aGUgZ292ZXJubWVudCwgcmFuZ2luZyBmcm9tIGludmVzdG1lbnQgaW4gcHJvcGVydHkgdG8gZm9zdGVyaW5nIHNvY2lhbCByZXNwb25zaWJpbGl0aWVzIGxpa2UgZW1wbG95bWVudCBvcHBvcnR1bml0aWVzIGZvciB2ZXRlcmFucy4gVW5kZXJzdGFuZGluZyB3aGV0aGVyIHlvdXIgYnVzaW5lc3MgaXMgZWxpZ2libGUgZm9yIHRoZXNlIGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCB5b3VyIGZpbmFuY2lhbHMgZmF2b3JhYmx5LjwvcD5cblxuICAgIDxwPkJlbG93IGlzIGEgYnJpZWYgZXhwbGFuYXRpb24gb2Ygc29tZSBvZiB0aGUgbW9zdCBjb21tb24gR2VuZXJhbCBCdXNpbmVzcyBDcmVkaXRzIGFuZCBvdGhlcnMgdGhhdCBtaWdodCBhcHBseSB0byB5b3VyIHNpdHVhdGlvbjo8L3A+XG4gICAgXG4gICAgPG9sPlxuICAgICAgPGxpPjxzdHJvbmc+SW52ZXN0bWVudCBDcmVkaXQgKEZvcm0gMzQ2OCk6PC9zdHJvbmc+IEZvciBpbnZlc3RpbmcgaW4gY2VydGFpbiBwcm9wZXJ0eSBsaWtlIGJ1aWxkaW5ncywgZXF1aXBtZW50LCBvciBvdGhlciB0YW5naWJsZSBwcm9wZXJ0eS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+V29yayBPcHBvcnR1bml0eSBUYXggQ3JlZGl0IChGb3JtIDU4ODQpOjwvc3Ryb25nPiBGb3IgaGlyaW5nIGluZGl2aWR1YWxzIGZyb20gY2VydGFpbiB0YXJnZXQgZ3JvdXBzIHdobyBoYXZlIGNvbnNpc3RlbnRseSBmYWNlZCBzaWduaWZpY2FudCBiYXJyaWVycyB0byBlbXBsb3ltZW50LjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5EaXNhYmxlZCBBY2Nlc3MgQ3JlZGl0Ojwvc3Ryb25nPiBJZiB5b3VyIGJ1c2luZXNzIGluY3VycmVkIGV4cGVuc2VzIGZvciBtYWtpbmcgaXQgbW9yZSBhY2Nlc3NpYmxlIHRvIGluZGl2aWR1YWxzIHdpdGggZGlzYWJpbGl0aWVzLCBjb21wbHlpbmcgd2l0aCB0aGUgQW1lcmljYW5zIHdpdGggRGlzYWJpbGl0aWVzIEFjdCAoQURBKS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+Q3JlZGl0IGZvciBFbXBsb3llciBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIFRheGVzIG9uIEVtcGxveWVlIFRpcHMgKEZvcm0gODg0Nik6PC9zdHJvbmc+IElmIHlvdSBoYXZlIGVtcGxveWVlcyB3aG8gcmVjZWl2ZSB0aXBzLCB0aGlzIGNyZWRpdCByZWxhdGVzIHRvIHRoZSBTb2NpYWwgU2VjdXJpdHkgYW5kIE1lZGljYXJlIHRheGVzIHlvdSBwYXkgb24gdGhvc2UgdGlwcy48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RW1wbG95ZXIgQ3JlZGl0IGZvciBQYWlkIEZhbWlseSBhbmQgTWVkaWNhbCBMZWF2ZSAoRk1MQSBMZWF2ZSkgKEZvcm0gODk5NCk6PC9zdHJvbmc+IEZvciBidXNpbmVzc2VzIHByb3ZpZGluZyBwYWlkIGZhbWlseSBhbmQgbWVkaWNhbCBsZWF2ZSB0byB0aGVpciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgSGVhbHRoIEluc3VyYW5jZSBQcmVtaXVtcyAoRm9ybSA4OTQxKTo8L3N0cm9uZz4gSWYgeW91IHByb3ZpZGUgaGVhbHRoIGluc3VyYW5jZSB0byB5b3VyIGVtcGxveWVlcywgeW91IG1pZ2h0IGJlIGVsaWdpYmxlIGZvciB0aGlzIGNyZWRpdC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+UmVzZWFyY2ggYW5kIERldmVsb3BtZW50IENyZWRpdCAoRm9ybSA2NzY1KTo8L3N0cm9uZz4gRm9yIGJ1c2luZXNzZXMgZW5nYWdpbmcgaW4gcXVhbGlmaWVkIHJlc2VhcmNoIGFjdGl2aXRpZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgRW1wbG95ZXItUHJvdmlkZWQgQ2hpbGQgQ2FyZSBGYWNpbGl0aWVzIGFuZCBTZXJ2aWNlczo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBwcm92aWRlcyBjaGlsZCBjYXJlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgdG8geW91ciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPkNyZWRpdCBmb3IgU21hbGwgRW1wbG95ZXIgUGVuc2lvbiBQbGFuIFN0YXJ0dXAgQ29zdHMgYW5kIEF1dG8tRW5yb2xsbWVudCAoRm9ybSA4ODgxKTo8L3N0cm9uZz4gSWYgeW91ciBidXNpbmVzcyBoYXMgc2V0IHVwIG9yIHBsYW5zIHRvIHNldCB1cCBhIHBlbnNpb24gcGxhbiBmb3IgeW91ciBlbXBsb3llZXMuPC9saT5cbiAgICAgIDxsaT48c3Ryb25nPk90aGVyIGNyZWRpdHM6PC9zdHJvbmc+IEFkZGl0aW9uYWwgY3JlZGl0cyBjYW4gYmUgZm91bmQgaW4gZGV0YWlsIGF0IDxhIGhyZWY9XCJodHRwczovL3d3dy5pcnMuZ292L2luc3RydWN0aW9ucy9pMzgwMFwiPklSUyBJbnN0cnVjdGlvbnMgZm9yIEZvcm0gMzgwMDwvYT4uPC9saT5cbiAgICA8L29sPlxuICAgIFxuICAgIDxwPldlIHdvdWxkIGxpa2UgdG8gYXNzZXNzIHlvdXIgcG90ZW50aWFsIGVsaWdpYmlsaXR5IGZvciB0aGVzZSBjcmVkaXRzLiBQbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGFuZCA8c3Ryb25nPmluZm9ybSB1cyBpZiB5b3UgYmVsaWV2ZSB5b3VyIGJ1c2luZXNzIG1heSBxdWFsaWZ5PC9zdHJvbmc+IGZvciBhbnkgb2YgdGhlbSBiYXNlZCBvbiB5b3VyIGN1cnJlbnQgb3BlcmF0aW9ucyBvciBmdXR1cmUgcGxhbnMuIEFkZGl0aW9uYWxseSwgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjcmVkaXRzIG5vdCBsaXN0ZWQgdGhhdCB5b3UgYmVsaWV2ZSBtYXkgYXBwbHkgdG8geW91ciBidXNpbmVzcywgbGV0IHVzIGtub3cuPC9wPlxuICAgIFxuICAgIDxwPllvdXIgaW5zaWdodHMgd2lsbCBncmVhdGx5IGFzc2lzdCB1cyBpbiBlbnN1cmluZyB3ZSBleHBsb3JlIGFsbCBhdmVudWVzIHRvIHJlZHVjZSB5b3VyIHRheCBsaWFiaWxpdHkgYW5kIGNhcGl0YWxpemUgb24gYXZhaWxhYmxlIGNyZWRpdHMuPC9wPlxuICAgIFxuICAgIDxwPldlIGFwcHJlY2lhdGUgeW91ciBwcm9tcHQgYXR0ZW50aW9uIHRvIHRoaXMgbWF0dGVyLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uIG9uIGFueSBvZiB0aGVzZSBjcmVkaXRzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIGNvbnRhY3QgdXMuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJ1c2luZXNzIEFzc2V0cyBTb2xkXCIsXG4gICAgYWN0aW9uVGl0bGU6IFwiQnVzaW5lc3MgQXNzZXRzIFNvbGRcIixcbiAgICBhY3Rpb25JbnN0cnVjdGlvbnM6IGA8cD5BcyB3ZSB3b3JrIHRvIGRpbGlnZW50bHkgcHJlcGFyZSB5b3VyIGJ1c2luZXNz4oCZcyB0YXggZG9jdW1lbnRhdGlvbiwgd2UgbmVlZCB0byBlbnN1cmUgY29tcGxldGVuZXNzIGFuZCBhY2N1cmFjeSBpbiByZXBvcnRpbmcgYWxsIHJlbGV2YW50IHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgb2NjdXJyZWQgd2l0aGluIHRoZSB0YXggeWVhci4gQW4gaW1wb3J0YW50IGFyZWEgb2YgZm9jdXMgaXMgdGhlIHNhbGUgb2YgYW55IGJ1c2luZXNzIGFzc2V0cy4gVGhpcyBpbmNsdWRlcyBib3RoIGFzc2V0cyBhY3RpdmVseSBpbiB1c2UgYW5kIHRob3NlIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVwcmVjaWF0ZWQuPC9wPlxuXG4gICAgPHA+VGhlIHNhbGUgb2YgYnVzaW5lc3MgYXNzZXRzIGNhbiBoYXZlIHNpZ25pZmljYW50IHRheCBpbXBsaWNhdGlvbnMsIGluY2x1ZGluZyBwb3RlbnRpYWwgY2FwaXRhbCBnYWlucyBvciBsb3NzZXMsIHJlY2FwdHVyZSBvZiBkZXByZWNpYXRpb24sIGFuZCBpbXBhY3RzIG9uIHlvdXIgYnVzaW5lc3PigJlzIGNhc2ggZmxvdyBhbmQgZmluYW5jaWFsIHN0YXRlbWVudHMuIEFjY29yZGluZ2x5LCBpdCBpcyBjcnVjaWFsIGZvciB1cyB0byBhY2N1cmF0ZWx5IHJlcG9ydCB0aGVzZSB0cmFuc2FjdGlvbnMgdG8gdGhlIElSUy48L3A+XG4gICAgXG4gICAgPHA+UGxlYXNlIGNvbmZpcm0gaWYgeW91ciBidXNpbmVzcyBoYXMgc29sZCBhbnkgYXNzZXRzIGR1cmluZyB0aGUgY3VycmVudCB0YXggcGVyaW9kIGJ5IHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgICBcbiAgICA8dWw+XG4gICAgICA8bGk+PHN0cm9uZz5Bc3NldCBEZXNjcmlwdGlvbjo8L3N0cm9uZz4gQSBicmllZiBkZXNjcmlwdGlvbiBvZiBlYWNoIGFzc2V0IHNvbGQgKGUuZy4sIGVxdWlwbWVudCwgcHJvcGVydHksIHZlaGljbGVzKS48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+RGF0ZSBvZiBTYWxlOjwvc3Ryb25nPiBUaGUgZGF0ZSBvbiB3aGljaCBlYWNoIGFzc2V0IHdhcyBzb2xkLjwvbGk+XG4gICAgICA8bGk+PHN0cm9uZz5TYWxlIFByb2NlZWRzOjwvc3Ryb25nPiBUaGUgYW1vdW50IG9mIG1vbmV5IHJlY2VpdmVkIGZyb20gdGhlIHNhbGUgb2YgZWFjaCBhc3NldC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+T3JpZ2luYWwgUHVyY2hhc2UgUHJpY2UgYW5kIERhdGU6PC9zdHJvbmc+IFRoZSBvcmlnaW5hbCBwdXJjaGFzZSBwcmljZSBhbmQgcHVyY2hhc2UgZGF0ZSBmb3IgZWFjaCBhc3NldC48L2xpPlxuICAgICAgPGxpPjxzdHJvbmc+QWNjdW11bGF0ZWQgRGVwcmVjaWF0aW9uOjwvc3Ryb25nPiBUaGUgdG90YWwgZGVwcmVjaWF0aW9uIGNsYWltZWQgb24gZWFjaCBhc3NldCB1cCB0byB0aGUgcG9pbnQgb2Ygc2FsZS48L2xpPlxuICAgIDwvdWw+XG4gICAgXG4gICAgPHA+SWYgeW91IGhhdmUgbm90IHNvbGQgYW55IGJ1c2luZXNzIGFzc2V0cyBkdXJpbmcgdGhpcyBwZXJpb2QsIHBsZWFzZSBjb25maXJtIHRoaXMgYXMgd2VsbC4gWW91ciB0aW1lbHkgcmVzcG9uc2UgdG8gdGhpcyBpbnF1aXJ5IGlzIGNydWNpYWwgZm9yIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIgdGF4IHJldHVybi48L3A+XG4gICAgXG4gICAgPHA+SWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGFzc2lzdGFuY2UgaW4gZ2F0aGVyaW5nIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSBkbyBub3QgaGVzaXRhdGUgdG8gcmVhY2ggb3V0LiBXZSBhcmUgaGVyZSB0byBhc3Npc3QgeW91IGV2ZXJ5IHN0ZXAgb2YgdGhlIHdheS48L3A+XG4gICAgXG4gICAgPHA+VGhhbmsgeW91IGZvciB5b3VyIHByb21wdCBhdHRlbnRpb24gdG8gdGhpcyBtYXR0ZXIuPC9wPmAsXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvblwiLFxuICAgIGFjdGlvblRpdGxlOiBcIkhvbWUgT2ZmaWNlIERlZHVjdGlvbiBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSByZWNlaXZlZCBhbmQgY29tcGxldGVkIGEgYnVzaW5lc3MgdXNlIG9mIGhvbWUgc3ByZWFkc2hlZXQgZnJvbSB1cywgeW91IGNhbiBzYWZlbHkgaWdub3JlIHRoaXMgYWN0aW9uIGl0ZW0uIFdlJ2xsIGNsb3NlIGl0IG91dCBvbmNlIHdlIHZlcmlmeSB3ZSBoYXZlIHRoZSBpbmZvcm1hdGlvbiBvbiBmaWxlLjwvcD5cbiAgXG4gICAgPHA+WW91J3ZlIGluZGljYXRlZCB0aGF0IHlvdSB1c2UgcGFydCBvZiB5b3VyIGhvbWUgcmVndWxhcmx5IGFuZCBleGNsdXNpdmVseSBmb3IgYnVzaW5lc3MgcHVycG9zZXMuIFRoaXMgbWF5IHF1YWxpZnkgeW91IGZvciBhIGhvbWUgb2ZmaWNlIGRlZHVjdGlvbi4gVG8gYWNjdXJhdGVseSBjYWxjdWxhdGUgdGhpcyBkZWR1Y3Rpb24sIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gIFxuICAgIDx1bD5cbiAgICAgIDxsaT5Ub3RhbCBzcXVhcmUgZm9vdGFnZSBvZiB5b3VyIGhvbWU8L2xpPlxuICAgICAgPGxpPlNxdWFyZSBmb290YWdlIG9mIHlvdXIgaG9tZSBvZmZpY2U8L2xpPlxuICAgICAgPGxpPkJyaWVmIGRlc2NyaXB0aW9uIG9mIGhvdyB5b3UgdXNlIHRoaXMgc3BhY2UgZm9yIGJ1c2luZXNzPC9saT5cbiAgICAgIDxsaT5Ib21lLXJlbGF0ZWQgZXhwZW5zZXM6IG1vcnRnYWdlIGludGVyZXN0L3JlbnQsIHByb3BlcnR5IHRheGVzLCBpbnN1cmFuY2UsIHV0aWxpdGllcywgcmVwYWlyczwvbGk+XG4gICAgICA8bGk+RGlyZWN0IGV4cGVuc2VzIGZvciB0aGUgb2ZmaWNlIHNwYWNlPC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5JZiB5b3UgaGF2ZW4ndCByZWNlaXZlZCBvdXIgYnVzaW5lc3MgdXNlIG9mIGhvbWUgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XG4gIFxuICAgIDxwPlRoaXMgZGF0YSB3aWxsIGhlbHAgdXMgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciBwb3RlbnRpYWwgaG9tZSBvZmZpY2UgZGVkdWN0aW9uIGFuZCBvcHRpbWl6ZSB5b3VyIHRheCByZXR1cm4uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcbiAgfSxcbiAge1xuICAgIGFjdGlvblRheFN1YmplY3Q6IFwiQnVzaW5lc3MgVXNlIG9mIFBlcnNvbmFsIFZlaGljbGVcIixcbiAgICBhY3Rpb25UaXRsZTogXCJQZXJzb25hbCBWZWhpY2xlIEJ1c2luZXNzIFVzZSBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgY29tcGxldGVkIHZlaGljbGUgZXhwZW5zZSBsb2cgb3Igc3ByZWFkc2hlZXQgZm9yIHRoZSB0YXggeWVhciwgeW91IGNhbiBpZ25vcmUgdGhpcyBhY3Rpb24gaXRlbS4gV2UnbGwgY2xvc2UgaXQgb25jZSB3ZSB2ZXJpZnkgd2UgaGF2ZSB0aGUgaW5mb3JtYXRpb24gb24gZmlsZS48L3A+XG4gIFxuICAgIDxwPllvdSd2ZSBpbmRpY2F0ZWQgdGhhdCB5b3UgdXNlIHlvdXIgcGVyc29uYWwgdmVoaWNsZSBmb3IgYnVzaW5lc3MgcHVycG9zZXMuIFRoaXMgbWF5IHF1YWxpZnkgeW91IGZvciB2ZWhpY2xlLXJlbGF0ZWQgdGF4IGRlZHVjdGlvbnMuIFRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHRoZXNlIGRlZHVjdGlvbnMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjo8L3A+XG4gIFxuICAgIDx1bD5cbiAgICAgIDxsaT5WZWhpY2xlIG1ha2UsIG1vZGVsLCBhbmQgeWVhcjwvbGk+XG4gICAgICA8bGk+RGF0ZSB5b3Ugc3RhcnRlZCB1c2luZyB0aGUgdmVoaWNsZSBmb3IgYnVzaW5lc3M8L2xpPlxuICAgICAgPGxpPldhcyB0aGUgdmVoaWNsZSBwdXJjaGFzZWQgaW4gYW50aWNpcGF0aW9uIG9mIGJ1c2luZXNzIHVzZT8gSWYgeWVzLCBwcm92aWRlIHB1cmNoYXNlIGRhdGUgYW5kIGNvc3Q8L2xpPlxuICAgICAgPGxpPlRvdGFsIG1pbGVzIGRyaXZlbiBkdXJpbmcgdGhlIHRheCB5ZWFyPC9saT5cbiAgICAgIDxsaT5CdXNpbmVzcyBtaWxlcyBkcml2ZW4gZHVyaW5nIHRoZSB0YXggeWVhcjwvbGk+XG4gICAgICA8bGk+Q29tbXV0aW5nIG1pbGVzIChpZiBhcHBsaWNhYmxlKTwvbGk+XG4gICAgICA8bGk+QWN0dWFsIGV4cGVuc2VzOlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpPkdhcyBhbmQgb2lsPC9saT5cbiAgICAgICAgICA8bGk+TWFpbnRlbmFuY2UgYW5kIHJlcGFpcnM8L2xpPlxuICAgICAgICAgIDxsaT5WZWhpY2xlIHJlZ2lzdHJhdGlvbiBmZWVzPC9saT5cbiAgICAgICAgICA8bGk+VmVoaWNsZSBpbnN1cmFuY2U8L2xpPlxuICAgICAgICAgIDxsaT5MZWFzZSBwYXltZW50cyAoaWYgYXBwbGljYWJsZSk8L2xpPlxuICAgICAgICAgIDxsaT5QYXJraW5nIGZlZXMgYW5kIHRvbGxzIGZvciBidXNpbmVzcyB0cmlwczwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPkRvIHlvdSAob3IgeW91ciBzcG91c2UpIGhhdmUgYW5vdGhlciB2ZWhpY2xlIGF2YWlsYWJsZSBmb3IgcGVyc29uYWwgdXNlPzwvbGk+XG4gICAgICA8bGk+RG8geW91IGhhdmUgd3JpdHRlbiBldmlkZW5jZSB0byBzdXBwb3J0IHlvdXIgbWlsZWFnZSBsb2c/PC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IHB1cmNoYXNlZCB0aGUgdmVoaWNsZSBpbiBhbnRpY2lwYXRpb24gb2YgYnVzaW5lc3MgdXNlLCB3ZSBtYXkgYmUgYWJsZSB0byBjbGFpbSBkZXByZWNpYXRpb24uIFRoaXMgY291bGQgcG90ZW50aWFsbHkgaW5jcmVhc2UgeW91ciBkZWR1Y3Rpb24gYnV0IG1heSBhbHNvIGhhdmUgaW1wbGljYXRpb25zIGZvciBmdXR1cmUgdGF4IHllYXJzLjwvcD5cbiAgXG4gICAgPHA+SWYgeW91IGhhdmVuJ3QgcmVjZWl2ZWQgb3VyIHZlaGljbGUgZXhwZW5zZSBsb2cgc3ByZWFkc2hlZXQsIHBsZWFzZSBsZXQgdXMga25vdywgYW5kIHdlJ2xsIHByb3ZpZGUgaXQgdG8geW91IGZvciBlYXN5IGNvbXBsZXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbi48L3A+XG4gIFxuICAgIDxwPlRoaXMgZGF0YSB3aWxsIGhlbHAgdXMgYWNjdXJhdGVseSBjYWxjdWxhdGUgeW91ciB2ZWhpY2xlLXJlbGF0ZWQgZGVkdWN0aW9ucyBhbmQgb3B0aW1pemUgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHdoYXQgcXVhbGlmaWVzIGFzIGJ1c2luZXNzIHVzZSBvciBob3cgdG8gdHJhY2sgeW91ciBtaWxlYWdlLCBwbGVhc2UgZG9uJ3QgaGVzaXRhdGUgdG8gYXNrLjwvcD5gXG4gIH0sXG4gIHtcbiAgICBhY3Rpb25UYXhTdWJqZWN0OiBcIkJ1c2luZXNzIFRyYXZlbCBQYWlkIHdpdGggUGVyc29uYWwgRnVuZHNcIixcbiAgICBhY3Rpb25UaXRsZTogXCJCdXNpbmVzcyBUcmF2ZWwgUmVpbWJ1cnNlbWVudCBJbmZvcm1hdGlvblwiLFxuICAgIGFjdGlvbkluc3RydWN0aW9uczogYDxwPjxzdHJvbmc+SW1wb3J0YW50Ojwvc3Ryb25nPiBJZiB5b3UndmUgYWxyZWFkeSBwcm92aWRlZCB1cyB3aXRoIGEgZGV0YWlsZWQgbG9nIG9yIHNwcmVhZHNoZWV0IG9mIHlvdXIgYnVzaW5lc3MgdHJhdmVsIGV4cGVuc2VzIGZvciB0aGUgdGF4IHllYXIsIHlvdSBjYW4gaWdub3JlIHRoaXMgYWN0aW9uIGl0ZW0uIFdlJ2xsIGNsb3NlIGl0IG9uY2Ugd2UgdmVyaWZ5IHdlIGhhdmUgdGhlIGluZm9ybWF0aW9uIG9uIGZpbGUuPC9wPlxuICBcbiAgICA8cD5Zb3UndmUgaW5kaWNhdGVkIHRoYXQgeW91IHBhaWQgZm9yIGJ1c2luZXNzIHRyYXZlbCB1c2luZyBwZXJzb25hbCBmdW5kcy4gVGhpcyBtYXkgcXVhbGlmeSB5b3UgZm9yIHRheCBkZWR1Y3Rpb25zIG9yIHJlaW1idXJzZW1lbnRzIGZyb20geW91ciBidXNpbmVzcy4gVG8gYWNjdXJhdGVseSBhY2NvdW50IGZvciB0aGVzZSBleHBlbnNlcywgd2UgbmVlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOjwvcD5cbiAgXG4gICAgPHVsPlxuICAgICAgPGxpPkRhdGUgb2YgZWFjaCBidXNpbmVzcyB0cmlwPC9saT5cbiAgICAgIDxsaT5EZXN0aW5hdGlvbiBhbmQgcHVycG9zZSBvZiBlYWNoIHRyaXA8L2xpPlxuICAgICAgPGxpPk1ldGhvZCBvZiB0cmF2ZWwgKGUuZy4sIHBlcnNvbmFsIHZlaGljbGUsIHB1YmxpYyB0cmFuc3BvcnRhdGlvbiwgYWlyZmFyZSk8L2xpPlxuICAgICAgPGxpPlRvdGFsIGNvc3Qgb2YgdHJhdmVsLCBpbmNsdWRpbmcgdHJhbnNwb3J0YXRpb24sIGxvZGdpbmcsIGFuZCBtZWFsczwvbGk+XG4gICAgICA8bGk+UmVjZWlwdHMgb3IgZG9jdW1lbnRhdGlvbiBzdXBwb3J0aW5nIGVhY2ggZXhwZW5zZTwvbGk+XG4gICAgICA8bGk+QW55IGJ1c2luZXNzIG1pbGVzIGRyaXZlbiAoaWYgYXBwbGljYWJsZSkgZHVyaW5nIHRoZXNlIHRyaXBzPC9saT5cbiAgICAgIDxsaT5XaGV0aGVyIHlvdSB3ZXJlIHJlaW1idXJzZWQgYnkgeW91ciBidXNpbmVzcyBvciBhbm90aGVyIGVudGl0eSBmb3IgYW55IG9mIHRoZXNlIGV4cGVuc2VzPC9saT5cbiAgICA8L3VsPlxuICBcbiAgICA8cD5QbGVhc2Ugbm90ZTogSWYgeW91IGhhdmVuJ3QgdHJhY2tlZCB0aGVzZSBleHBlbnNlcyB0aHJvdWdob3V0IHRoZSB5ZWFyLCBub3cgaXMgYSBnb29kIHRpbWUgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIEFjY3VyYXRlIHJlY29yZHMgd2lsbCBoZWxwIGVuc3VyZSB5b3UgcmVjZWl2ZSB0aGUgbWF4aW11bSBhbGxvd2FibGUgZGVkdWN0aW9ucyBhbmQgYXZvaWQgYW55IGlzc3VlcyBpbiB0aGUgZXZlbnQgb2YgYW4gYXVkaXQuPC9wPlxuICBcbiAgICA8cD5JZiB5b3UgbmVlZCBhIHRlbXBsYXRlIG9yIGd1aWRhbmNlIG9uIGhvdyB0byBvcmdhbml6ZSB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgbGV0IHVzIGtub3csIGFuZCB3ZSdsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgdG9vbHMgdG8gYXNzaXN0IHlvdS48L3A+XG4gIFxuICAgIDxwPlByb3ZpZGluZyB0aGlzIGRhdGEgd2lsbCBoZWxwIHVzIGFjY3VyYXRlbHkgY2FsY3VsYXRlIHlvdXIgdHJhdmVsLXJlbGF0ZWQgZGVkdWN0aW9ucyBhbmQgb3B0aW1pemUgeW91ciB0YXggcmV0dXJuLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHdoYXQgcXVhbGlmaWVzIGFzIGEgYnVzaW5lc3MgZXhwZW5zZSBvciBob3cgdG8gZG9jdW1lbnQgeW91ciB0cmF2ZWwsIHBsZWFzZSBkb24ndCBoZXNpdGF0ZSB0byBhc2suPC9wPmBcbiAgfVxuXTtcbiJdfQ==
|