diff --git a/pdf/template.js b/pdf/template.js
index c66fb6d..bfa9cb5 100755
--- a/pdf/template.js
+++ b/pdf/template.js
@@ -1,553 +1 @@
-// Inline base64 logo — avoids Puppeteer needing a live HTTP request to /static/
-const LOGO_B64 = 'iVBORw0KGgoAAAANSUhEUgAAAGsAAACbCAYAAABlLWUVAAAQAElEQVR4AexdC3AW1RW+f8CgQqsiCLUVLBjEKuADRFBQsCDgY6zAWAq2FijtjFL7tFUcRtvRqeNYW6Y+Z2oVHOigtCKPFDCgSAsICAFJEBTRVEDegYRHXtdz/nCT/Tf7uOfc/fffTXZnD3cf53zn3O/ec/fs/4ckTyRbbBggDZbcsbhN5YaOMpFgOKDOEq3BqtxY8FnF+gtkZfm9J6VMiUSC4QA5RTn58fipOgPnOVgHi0d+C8FkbXkXHbBEh8dAzZFlM5BnP2vXwTq27gKZX7WhTEoBmZRIGDwg58c2XvGu26A5DtZRGCgYI5EITFJgLlQeavYNRv7BbZO9yWCVv99JCnguJZKCkcqdHN3Q7ZB9tDIGKz1QoBHqTEr8CUe+ayvP27/twa8BPQ17xmCFsS4nPiBhYXR0eDij/NWjDSMFBw2DdWRtZ4CAtBfNVeLZr/pxgZGCPT1Ycu/MtjBSzukISsk9yIYc8gCu03t6sI7serAiGSngI6Kz8vAaXPWESA9WUDGed93eVCKNHLTp8XrXoLiFqSTyTh1Y0VNCqc6VVmdf8157GCQUBEykkYGz2w/6HHlB4fKr7BA1r2LHD0rxgCPnD9iTOqf3osEc25Zmg1y1anfl09x+y4otnfIk5ClHTnVd0JbruKXandur8DccrtHm0NbRJfDMSgF3dLnwwr7HwTDZiQx0GLgHyIad+IokayvaszKrw8Dd6I0YZqKuGMBM4QhkloJI2rAY6Hg9b7JDZul9kSYtFWNYnWrOfqx86h7nQX1Bfh9uziSG1TcO78kyGNboBOAHlkH43AuGWRIkAL8tHoLCt9KFzMLCTl8kPLtaPNOBEKDPuYAyH3knZ5ZItkAYkISVDHXRaVJgIAs5EBgrcmGXJ3BZI4hE3Rx0rtm5RB4JgryTM6vZkZajDlEzC8MkP7MkekHL5iuh9Ax5pApUg9TYsIqh2iT65gykBGQW9eMmkWwBMCDheUUTUf+1fgC+E4gQGCAXGDgbQoir2bvARz9JIBPJpXuzZzGsDgL5pNcmiAueWclng8BD6LuEtKIKfRkMvVvN0yGMlaAKlO4pYIMqYJLshgxQOU9h6Z4sgyIHG3UJRH3ILFqkaORpkdzMCgPIOxQYtJdiAd+tiGQzZkBCNUgRAbwnBYbIzUYtLlAf3rMgWDyiCJgkuyEDFL5P6yaZZcg51/w0/6TynfzMwnWWG2Bi18gA8kgVcjXY6C45CpsByKzkPSts0tGfhHWQKpBZ9DdpdJaIKQN03pMCw4BzE1NILFJxgfqsZVBKCRlpEmrLtt1W2B0opD9+4D0L0hHepgVBPiosqG3ZdBv2nsC1dVxYyyCm5O4tf7zMMOQWaV66+BKsKwRySBX2clZe9mpJi2TboNM7igZ8YGCOX5HQPsiVkMJKShYVyNLC3hUmAbQUW+Sq+uSBqxR3nJadWYpkWXeiLQaCoq4lbT0DB3e+Nhx5Qam/YvYvsxp0rmS2LiyQ2RSzrjpbf/nhE9dnK+a9JY8tkfBgCkrYBQbEwHpImtg50212df+uf6wyiSlMW1bpLuC5lRMxGxdn61z1heE3h5kFSynQR5mZWxb0QHWwCmb/cGGPOgSMiwT6zApqbfbCCWaY6lHq6kTKy1fU7hlXg/XdDu/fA5++0TM8b9HyBJnFf8+SsO6GLV9snsb+LW5W6ovnXwqfz8Wr77HLLCvhLe04VgWGKgTKNvzyEtOBUlhxamO3DOKye6CscIfJYG18s2fslkDsN7xnQbfjNL1UrBA2e1cYMWtjuQwix6XL73qCO1hoH0eBAgO+fBQ0kbWyj6m06zCwu5Occ+HwvwuNeE6Ulz4kGFvxwmv3CQ181HGKD6+R++7AF+JTBZ5Z8EkCTDNJkGvGfLTZVHoMenmnk3TvP2OybiyCsdVUHeuog3/190pTTvHhNdO+o71ODHYdyCxGj7Ns0rH7hF46LkqK7vyfjl5z0YHMor8YZrvzXfpM+1BqvHAfP7J9ACWW9fO+I3Vwz+0yrjcFl6OrE4ddh1VgcIKj2sCqLHSEgquDhzrd+07fQsHl6KIfqvBKd050RJt+o0sg5cHIp0cb37puJ2jp7T5YDbNDD81MSzcWi15kMwuZsMTZwKP9WnXV0W+jrp9smN9/u93W6bzfmBIsjf3gjO87+fa7FslnlmLCvma7nSt9r7amqqLAzd563QsjyHtWn7rHkawGFSn9x27VmuVrX78cJ6Uya7YtZBb9PStMNiQMg454xbRh4dBdOhi6k8PLl+49nXjsOpBZOHmpohuSuV4qdUa10PrEQbhu1cf3dRWGGCLwjcp5SkS6wBCw9R+7KR+Sy7XAUPdWz70CD8Gi6Y43/CTV6sxQ/xCOXzxO9yO/DCL19uXA7Rx17bJmXr9SN33r9f6j14f6J6asvnWPI78MIvl5rdseE8xlrK7mZE+urcjqxlkGId90R1bpZbUPDuDXjV77deXbq/3vP3tBbzIBvPTVvbPOuXR1plX2z5RvSguZlf3AcuWheOndi3R8XzXijYE6ernWicUzC0nKP7PzEzqzEHWVHDtYMopqo2z92qO7V3Tw0/G6rxOXXQcyi752egWRrXv97lw2TWg8t1bN6W1ZCv37dn7XUeMFY9v87gP7GWYWE//YhK2/Ocmsze/er/V9lbBt9pnmdo5mGwvvXu5233r9soFPzkZ9qiAG1caqj/ZUycl71pEvVm62Bq57XHD5U+0wbXxFyvxjh0uH+OrpOrbpbSqadA9i2y6TTtG+qcCnSYDidh2+IoF0hC/6BEUA0GhHXwyAzn1uqdSJ873ZV57S0Rs07q5WjDDE0b3rZ6bxOcbKBjkgSk4yC2fOobKVrG9j0TYoSaUerVPcUVrln2Jj11UYlBYKDDtMOOdbVk4t5ni6cXwxLAUcy2BsVs7p91EwSHQUKDBSQkI6UoTuJtNC+cq8qn+m7E1a7qDX1Vb3UH71I26qqTAobc6WQUz/TUVThjfthv8VtDUVfy/OGla/zhp6V604usdQYAC4rrbSAxOj/TTO4d3vL+HgDJmwCZYDsDyNI4htSuSxfkPOillXygxfwmAjxox+c5pZGC+3u2jLlZsmfNCa49fuj4OhbOxYOuc5fWbhev3F9vnDVAcoLdpyheLHqmv3Z71HPbZj6ZznrBpUndu25tGl6pjS3vzDjayqsM3ZnT6j+FG6RTOvwsmvTnPSQmbBWzOEIQliGqndFxfPjqNzfsOY/1zM8eeEzcFRNk54ftcgs3CCUkW55LaZ/la9cdvPOEitWrf9VNg+7PQ/F8wtM2aR9isMNic872uRyKwTFbuf5/R6yPhV3fxmo/V+p4uHP8Lxs+yVq6UVRx1zsJSNwqC0kFnKvPm3vW780+Nx7iVkFryy5OgTDGnx+8nGF3/BIfK8TgMesOJ4HXPwpZzbyg2Tg6ds3DC9ruf8PQvqGnzfEx9veukZ1RFK23fkszMUhlfbre99XSi4SnfpK0/WuOEqHU7rhul1vcUsg5f0mljGITVKNrAM5r50lzCdUJbPHvY0h5zrb33+G2jvJRzc4qJp44LGVHF44brdg8zyLhdFukS16wjDzY5Xf1518vCvOMDtLrh2r3CMsx53xMQNeCCo257PlsBX/mjqJlREq74bpvv1SGUWzihrdyjHaOsmFByrrhuuum7VpR4rDEprKTBgOQSPsCKlH/heLagZ7V7YHyx/eAYHfMTEdWe44XLw1i35+etueOo6B1fZKAxKC1+RQNpBCS0oojxyWw9fe3cum8qBTaVSNU59GDVpPXSQjri/bPUYJ7yMa3TYRgsPDjJ8WPQil1k40xp7RDtCW7vQEBq17ThO543a9CMnPL9rkXtm4Rq+7LVb5tG7L8Stk9dl/GbONme238XBWTpr+A6Mw0842MrGD9vpPlSDyjw67akTh+4KIprvTlii9Z/D7b6gKjX+FXl2zCDOIbOi8XGThLXZKtzOBY1hxbMfc2NEOzuWznkkMws7s7bwgbnYUuX2Ke+nC4qul935LNUW9Re8dC0+OvAwcgKZBSU7hCcJYtoLHV9ffr56LNdPKi//ZO9BD9/PsdeJTelw8JWNwqC0kFk4EamiXHJbXX88/NsmrzqLZ4lWurGhHupzBe1pEtnMwhm36OWha7hUeNq53Jz/Yn/HLxkxlibigqF7uQme38oGwJF8z4K4BUp1VWV/iDG0PU0geEPfvoIKoMvd0ZwkoBzxZRCXCS4dNDtIKQYXNB+Z2tg3mkR6GcSZ/s68SYWZnczO2ZsvDKhFfxQxiYTiR+nCbDJxmX3bw/u2jsi+l3h4gMyK5kuxtLwkh0Gl1Z/usUlcuj6sepEuMOCZmi405r9083YTYvxs//XcAKl86bZ+mH73df0oPcSDr0igUVd0WzAx2nX9nNarqT5eYOTPx5g8UhBX2sYH1/M2YKRnomaL/mKRWdgfz44b3FyzZPowxOeIgVvKODXoxuKZJeH5tXTOPaz/wOBHaNmOt5ciPkf8sL3uc/xxqkGvGLJ2r/zgJ6z/GpS1gHIADJkVzQ9yJaxLdgman80r/zbd7oNybhIPxY/ShcyivUWL9I98CcON4zMl/v3C8IOGjjPMtxXPeUyk+8OLRxhtdJ+xKTAg0URVdWV7I35sxohpIjY40inHbyxK94ZyCHtIosRdefGs7y/OwEVsqrjD+9+h+gJ9eGZF/xMMCdWgkgWvjtX6HYJ+bB099P+RCpPV+jnwuU/2CXixWgZhcomKI3tGQdzGO2IZCUwgkyDIvsEfFBgmLuNpO+evNyBXsQs+dssgLh+LXvvRehOmEcNcTCLA1yXq40eIWGZW+YGd15hRpWvtpZfyupmFeykBmYWjTBNhuElYhEyFG8Lsv9xYbepb2XNjQDuFQWljV2DAOKcr7rnPjXwLO02VOlnXWmGYtFS/dn2qb7SH9yxIZ6g0BEXQ0kQovlx0q05W3s4KwQWP1H/AkCAs/8oI7QmC/mKbWTgzVb9121l/HizRLijR9eukx4mB9cya+fRgaSLIWBBCjSEIn1YMqn+rvhVH5xgHPJbVIAbe0gQHFDKLWu8n+hKeNWHLRQU3PZKX36ZtqD+i3NIyIqj+DrnjD4/njZu6eADnYZfYwLspjERYPICr+k8wspXSCW5wj4yGwep66dD7RFhTJPFDTskf//YdeBkW9Zk19I7pzyUckjkMbX5jVqE0lO4Xdes3SRj9PEJKiMReiIA5mPhgfVYJ2BoGa9iYp16WkF6JQIZFiAcYo4a9YbDwyqTfrcD0wMNEIsCAfTwyBgvjQwWZg5e+xGdm5YjjgONhlSaDhTcn/355kmFIRI7EjX/HwcIY0UBGaO1uCbF0/mafucg78u8kroOFyj95aHkKBcYstDI1pr6M+UGeb7vnmbuRdzfxHCxlNAUGDUWcLktl8kwj/80xO2fIZX5+28PIK4rQ2LQGS+FMeagohfLTh4tSKHD97UQEiQPkDQV5vPfXC0g/Dv4V3Z9eXgAAAAVJREFUAAAA///yqks2AAAABklEQVQDAL3XqznDSjO2AAAAAElFTkSuQmCC';
-
-const TIERS = [
- { min: 0, max: 4, label: 'Tier 0–1 — Elite Standing', color: '#16a34a', bg: '#f0fdf4' },
- { min: 5, max: 9, label: 'Tier 1 — Realignment', color: '#854d0e', bg: '#fefce8' },
- { min: 10, max: 14, label: 'Tier 2 — Administrative Lockdown', color: '#b45309', bg: '#fff7ed' },
- { min: 15, max: 19, label: 'Tier 3 — Verification', color: '#c2410c', bg: '#fff7ed' },
- { min: 20, max: 24, label: 'Tier 4 — Risk Mitigation', color: '#b91c1c', bg: '#fef2f2' },
- { min: 25, max: 29, label: 'Tier 5 — Final Decision', color: '#991b1b', bg: '#fef2f2' },
- { min: 30, max: 999, label: 'Tier 6 — Separation', color: '#ffffff', bg: '#7f1d1d' },
-];
-
-function getTier(pts) {
- return TIERS.find(t => pts >= t.min && pts <= t.max) || TIERS[0];
-}
-
-function fmt(d) {
- if (!d) return '—';
- return new Date(d + 'T12:00:00').toLocaleDateString('en-US', {
- weekday: 'long', year: 'numeric', month: 'long', day: 'numeric',
- timeZone: 'America/Chicago',
- });
-}
-
-function fmtDT(d, t) { return t ? `${fmt(d)} at ${t}` : fmt(d); }
-
-function field(label, value) {
- if (!value) return '';
- return `
-
`;
-}
-
-function buildHtml(v, score) {
- const priorPts = score.active_points || 0;
- const priorTier = getTier(priorPts);
- const newTotal = priorPts + v.points;
- const newTier = getTier(newTotal);
- const escalated = priorTier.label !== newTier.label;
- const genAt = new Date().toLocaleString('en-US', {
- timeZone: 'America/Chicago', dateStyle: 'full', timeStyle: 'short',
- });
- const docId = `CPAS-${v.id.toString().padStart(5, '0')}`;
-
- return `
-
-
-
-
-
-
-
-
-
-⚑ Confidential — Authorized HR & Management Use Only
-
-
-
-
-
-
-
-
-
Employee Name
-
${v.employee_name}
-
-
-
Department
-
${v.department || '—'}
-
-
-
Supervisor
-
${v.supervisor || '—'}
-
-
-
Witness / Documenting Officer
-
${v.witness_name || '—'}
-
-
-
-
-
-
-
-
-
-
Violation
-
${v.violation_name}
-
-
-
Category
-
${v.category}
-
-
-
Incident Date / Time
-
${fmtDT(v.incident_date, v.incident_time)}
-
-
-
Submitted By
-
${v.submitted_by || 'System'}
-
- ${v.location ? `
-
-
Location / Context
-
${v.location}
-
` : ''}
-
- ${v.details ? `
-
-
Incident Notes
- ${v.details}
-
` : ''}
-
-
-
-
-
-
-
-
${v.points}
-
- Points Assessed
- This violation
-
-
-
-
-
-
${priorPts}
-
Prior Active Points
-
- ${priorTier.label}
-
-
-
+
-
-
${v.points}
-
This Violation
-
-
=
-
-
${newTotal}
-
New Active Total
-
- ${newTier.label}
-
-
-
-
- ${escalated ? `
-
-
⚠
-
- Tier Escalation:
- This violation advances the employee from ${priorTier.label}
- to ${newTier.label}.
-
-
` : ''}
-
-
-
-
-
-
-
-
- | Points |
- Tier & Standing |
-
-
-
- ${TIERS.map(t => {
- const active = newTotal >= t.min && newTotal <= t.max;
- const range = t.min === 30 ? '30+' : `${t.min}–${t.max}`;
- return `
- | ${active ? '▶ ' : ''}${range} |
-
-
- ${t.label}
- ${active ? ' ← Current' : ''}
- |
-
`;
- }).join('')}
-
-
-
-
-
-
- Employee Notice: CPAS points remain active for a rolling 90-day period from the date of each incident.
- Accumulation of points may result in tier escalation and associated consequences as outlined in the Employee Handbook.
- The employee may submit a written response within 5 business days of receiving this document.
-
-
-
-
-
-
- By signing below, the employee acknowledges receipt of this violation record.
- Acknowledgement does not imply agreement with the violation as documented.
-
-
-
-
-
Employee Signature
-
-
Date
-
-
-
-
Supervisor / Documenting Officer Signature
-
-
Date
-
-
-
-
-
-
-
-
-`;
-}
-
-module.exports = buildHtml;
+Ly8gSW5saW5lIGJhc2U2NCBsb2dvIOKAlCBhdm9pZHMgUHVwcGV0ZWVyIG5lZWRpbmcgYSBsaXZlIEhUVFAgcmVxdWVzdCB0byAvc3RhdGljLwpjb25zdCBMT0dPX0I2NCA9ICdpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBR3NBQUFDYkNBWUFBQUJsTFdVVkFBQVFBRWxFUVZSNEFleGRDM0FXMVJXK2Y4Q2dRcXNpQ0xVVkxCakVLdUFEUkZCUXNDRGdZNnpBV0FxMkZpanRqRkw3dEZVY1J0dlJxZU5ZVzZZK1oyb1ZIT2lndENLUEZEQ2dTQXNJQ0FGSkVCVFJWRURlZ1lSSFh0ZHovbkNUL1RmN3VPZmMvZmZmVFhabkQzY2Y1M3puM08vZWMvZnMvNGNrVHlSYmJCZ2dEWmJjc2JoTjVZYU9NcEZnT0tET0VxM0JxdHhZOEZuRitndGtaZm05SjZWTWlVU0M0UUE1UlRuNThmaXBPZ1BuT1ZnSGkwZCtDOEZrYlhrWEhiQkVoOGRBelpGbE01Qm5QMnZYd1RxMjdnS1pYN1doVEVvQm1aUklHRHdnNThjMlh2R3UyNkE1RHRaUkdDZ1lJNUVJVEZKZ0xsUWVhdllOUnY3QmJaTzl5V0NWdjk5SkNuZ3VKWktDa2NxZEhOM1E3WkI5dERJR0t6MVFvQkhxVEVyOENVZStheXZQMjcvdHdhOEJQUTE3eG1DRnNTNG5QaUJoWVhSMGVEaWovTldqRFNNRkJ3MkRkV1J0WjRDQXRCZk5WZUxaci9weGdaR0NQVDFZY3UvTXRqQlN6dWtJU3NrOXlJWWM4Z0N1MDN0NnNJN3NlckFpR1NuZ0k2S3o4dkFhWFBXRVNBOVdVREdlZDkzZVZDS05ITFRwOFhyWG9MaUZxU1R5VGgxWTBWTkNxYzZWVm1kZjgxNTdHQ1FVQkV5a2tZR3oydy82SEhsQjRmS3I3QkExcjJMSEQwcnhnQ1BuRDlpVE9xZjNvc0VjMjVabWcxeTFhbmZsMDl4K3k0b3RuZklrNUNsSFRuVmQwSmJydUtYYW5kdXI4RGNjcnRIbTBOYlJKZkRNU2dGM2RMbnd3cjdId1REWmlReDBHTGdIeUlhZCtJb2theXZhc3pLcnc4RGQ2STBZWnFLdUdNQk00UWhrbG9KSTJyQVk2SGc5YjdKRFp1bDlrU1l0RldOWW5Xck9mcXg4Nmg3blFYMUJmaDl1emlTRzFUY083OGt5R05ib0JPQUhsa0g0M0F1R1dSSWtBTDh0SG9MQ3Q5S0Z6TUxDVGw4a1BMdGFQTk9CRUtEUHVZQXlIM2tuWjVaSXRrQVlrSVNWREhYUmFWSmdJQXM1RUJncmNtR1hKM0JaSTRoRTNSeDBydG01UkI0SmdyeVRNNnZaa1phakRsRXpDOE1rUDdNa2VrSEw1aXVoOUF4NXBBcFVnOVRZc0lxaDJpVDY1Z3lrQkdRVzllTW1rV3dCTUNEaGVVVVRVZisxZmdDK0U0Z1FHQ0FYR0RnYlFvaXIyYnZBUno5SklCUEpwWHV6WnpHc0RnTDVwTmNtaUF1ZVdjbG5nOEJENkx1RXRLSUtmUmtNdlZ2TjB5R01sYUFLbE80cFlJTXFZSkxzaGd4UU9VOWg2WjRzZ3lJSEczVUpSSDNJTEZxa2FPUnBrZHpNQ2dQSU94UVl0SmRpQWQrdGlHUXpaa0JDTlVnUkFid25CWWJJelVZdExsQWYzck1nV0R5aUNKZ2t1eUVERkw1UDZ5YVpaY2c1MS93MC82VHluZnpNd25XV0cyQmkxOGdBOGtnVmNqWFk2QzQ1Q3BzQnlLemtQU3RzMHRHZmhIV1FLcEJaOURkcGRKYUlLUU4wM3BNQ3c0QnpFMU5JTEZKeGdmcXNaVkJLQ1JscEVtckx0dDFXMkIwb3BEOSs0RDBMMGhIZXBnVkJQaW9zcUczWmRCdjJuc0MxZFZ4WXl5Q201TzR0Zjd6TU1PUVdhVjY2K0JLc0t3UnlTQlgyY2xaZTltcEppMlRib05NN2lnWjhZR0NPWDVIUVBzaVZrTUpLU2hZVnlOTEMzaFVtQWJRVVcrU3ErdVNCcXhSM25KYWRXWXBrV1hlaUxRYUNvcTRsYlQwREIzZStOaHg1UWFtL1l2WXZzeHAwcm1TMkxpeVEyUlN6cmpwYmYvbmhFOWRuSythOUpZOHRrZkJnQ2tyWUJRYkV3SHBJbXRnNTAyMTJkZit1ZjZ3eWlTbE1XMWJwTHVDNWxSTXhHeGRuNjF6MWhlRTNoNWtGU3luUVI1bVpXeGIwUUhXd0NtYi9jR0dQT2dTTWl3VDZ6QXBxYmZiQ0NXYVk2bEhxNmtUS3kxZlU3aGxYZy9YZER1L2ZBNSsrMFRNOGI5SHlCSm5GZjgrU3NPNkdMVjlzbnNiK0xXNVc2b3ZuWHdxZno4V3I3N0hMTEN2aExlMDRWZ1dHS2dUS052enlFdE9CVWxoeGFtTzNET0t5ZTZDc2NJZkpZRzE4czJmc2xrRHNON3huUWJmak5MMVVyQkEyZTFjWU1XdGp1UXdpeDZYTDczcUNPMWhvSDBlQkFnTytmQlEwa2JXeWo2bTA2ekN3dTVPY2MrSHd2d3VOZUU2VWx6NGtHRnZ4d212M0NRMTgxSEdLRDYrUisrN0FGK0pUQlo1WjhFa0NURE5Ka0d2R2ZMVFpWSG9NZW5tbmszVHZQMk95Yml5Q3NkVlVIZXVvZzMvMTkwcFRUdkhoTmRPK283MU9ESFlkeUN4R2o3TnMwckg3aEY0NkxrcUs3dnlmamw1ejBZSE1vcjhZWnJ2elhmcE0rMUJxdkhBZlA3SjlBQ1dXOWZPK0kzVnd6KzB5cmpjRmw2T3JFNGRkaDFWZ2NJS2oyc0NxTEhTRWdxdURoenJkKzA3ZlFzSGw2S0lmcXZCS2QwNTBSSnQrbzBzZzVjSElwMGNiMzdwdUoyanA3VDVZRGJOREQ4MU1TemNXaTE1a013dVpzTVRad0tQOVduWFYwVytqcnA5c21OOS91OTNXNmJ6Zm1CSXNqZjNnak84NytmYTdGc2xubG1MQ3ZtYTduU3Q5cjdhbXFxTEF6ZDU2M1FzanlIdFduN3JIa2F3R0ZTbjl4MjdWbXVWclg3OGNKNlV5YTdZdFpCYjlQU3RNTmlRTWc0NTR4YlJoNGRCZE9oaTZrOFBMbCs0OW5YanNPcEJaT0htcG9odVN1VjRxZFVhMTBQckVRYmh1MWNmM2RSV0dHQ0x3amNwNVNrUzZ3QkN3OVIrN0tSK1N5N1hBVVBkV3o3MENEOEdpNlk0My9DVFY2c3hRL3hDT1h6eE85eU8vRENMMTl1WEE3UngxN2JKbVhyOVNOMzNyOWY2ajE0ZjZKNmFzdm5XUEk3OE1Jdmw1cmRzZUU4eGxySzdtWkUrdXJjanF4bGtHSWQ5MFIxYnBaYlVQRHVEWGpWNzdkZVhicS8zdlAzdEJieklCdlBUVnZiUE91WFIxcGxYMno1UnZTZ3VabGYzQWN1V2hlT25kaTNSOFh6WGlqWUU2ZXJuV2ljVXpDMG5LUDdQekV6cXpFSFdWSER0WU1vcHFvMno5MnFPN1YzVHcwL0c2cnhPWFhRY3lpNzUyZWdXUnJYdjk3bHcyVFdnOHQxYk42VzFaQ3YzN2RuN1hVZU1GWTl2ODdnUDdHV1lXRS8vWWhLMi9PY21zemUvZXIvVjlsYkJ0OXBubWRvNW1Hd3Z2WHU1MjMzcjlzb0ZQemtaOXFpQUcxY2Fxai9aVXljbDcxcEV2Vm02MkJxNTdYSEQ1VSswd2JYeEZ5dnhqaDB1SCtPcnBPcmJwYlNxYWRBOWkyeTZUVHRHK3FjQ25TWURpZGgyK0lvRjBoQy82QkVVQTBHaEhYd3lBem4xdXFkU0o4NzNaVjU3UzBSczA3cTVXakRERTBiM3JaNmJ4T2NiS0Jqa2dTazR5QzJmT29iS1ZyRzlqMFRZb1NhVWVyVlBjVVZybG4ySmoxMVVZbEJZS0REdE1PT2RiVms0dDVuaTZjWHd4TEFVY3kyQnNWczdwOTFFd1NIUVVLREJTUWtJNlVvVHVKdE5DK2NxOHFuK203RTFhN3FEWDFWYjNVSDcxSTI2cXFUQW9iYzZXUVV6L1RVVlRoamZ0aHY4VnREVVZmeS9PR2xhL3pocDZWNjA0dXNkUVlBQzRycmJTQXhPai9UVE80ZDN2TCtIZ0RKbXdDWllEc0R5Tkk0aHRTdVN4ZmtQT2lsbFh5Z3hmd21BanhveCtjNXBaR0MrM3UyakxsWnNtZk5DYTQ5ZnVqNE9oYk94WU91YzVmV2JoZXYzRjl2bkRWQWNvTGRweWhlTEhxbXYzWjcxSFBiWmo2WnpuckJwVW5kdTI1dEdsNnBqUzN2ekRqYXlxc00zWm5UNmorRkc2UlRPdndzbXZUblBTUW1iQld6T0VJUWxpR3FuZEZ4ZlBqcU56ZnNPWS8xek04ZWVFemNGUk5rNTRmdGNnczNDQ1VrVzU1TGFaL2xhOWNkdlBPRWl0V3JmOVZOZys3UFEvRjh3dE0yYVI5aXNNTmljODcydVJ5S3dURmJ1ZjUvUjZ5UGhWM2Z4bW8vVitwNHVIUDhMeHMreVZxNlVWUngxenNKU053cUMwa0ZuS3ZQbTN2Vzc4MCtOeDdpVmtGcnl5NU9nVERHbngrOG5HRjMvQklmSzhUZ01lc09KNEhYUHdwWnpieWcyVGc2ZHMzREM5cnVmOFBRdnFHbnpmRXg5dmV1a1oxUkZLMjNma3N6TVVobGZicmU5OVhTaTRTbmZwSzAvV3VPRXFIVTdyaHVsMXZjVXNnNWYwbWxqR0lUVktOckFNNXI1MGx6Q2RVSmJQSHZZMGg1enJiMzMrRzJqdkpSemM0cUpwNDRMR1ZIRjQ0YnJkZzh6eUxoZEZ1a1MxNndqRHpZNVhmMTUxOHZDdk9NRHRMcmgycjNDTXN4NTN4TVFOZUNDbzI1N1Bsc0JYL21qcUpsUkVxNzRicHZ2MVNHVVd6aWhyZHlqSGFPc21GQnlycmh1dXVtN1ZwUjRyREVwcktUQmdPUVNQc0NLbEgvaGVMYWdaN1Y3WUh5eC9lQVlIZk1URWRXZTQ0WEx3MWkzNStldHVlT282QjFmWktBeEtDMStSUU5wQkNTMG9vanh5V3c5ZmUzY3VtOHFCVGFWU05VNTlHRFZwUFhTUWpyaS9iUFVZSjd5TWEzVFlSZ3NQRGpKOFdQUWlsMWs0MHhwN1JEdENXN3ZRRUJxMTdUaE81NDNhOUNNblBMOXJrWHRtNFJxKzdMVmI1dEc3TDhTdGs5ZGwvR2JPTm1lMjM4WEJXVHByK0E2TXcwODQyTXJHRDl2cFBsU0R5anc2N2FrVGgrNEtJcHJ2VGxpaTlaL0Q3YjZnS2pYK0ZYbDJ6Q0RPSWJPaThYR1RoTFhaS3R6T0JZMWh4Yk1mYzJORU96dVd6bmtrTXdzN3M3YndnYm5ZVXVYMktlK25DNHF1bDkzNUxOVVc5UmU4ZEMwK092QXdjZ0taQlNVN2hDY0pZdG9MSFY5ZmZyNTZMTmRQS2kvL1pPOUJEOS9Qc2RlSlRlbHc4SldOd3FDMGtGazRFYW1pWEhKYlhYODgvTnNtcnpxTFo0bFd1ckdoSHVwekJlMXBFdG5Nd2htMzZPV2hhN2hVZU5xNTNKei9Zbi9ITHhreGxpYmlncUY3dVFtZTM4b0d3SkY4ejRLNEJVcDFWV1YvaURHMFBVMGdlRVBmdm9JS29NdmQwWndrb0J6eFpSQ1hDUzRkTkR0SUtRWVhOQitaMnRnM21rUjZHY1NaL3M2OFNZV1puY3pPMlpzdkRLaEZmeFF4aVlUaVIrbkNiREp4bVgzYncvdTJqc2krbDNoNGdNeUs1a3V4dEx3a2gwR2wxWi91c1VsY3VqNnNlcEV1TU9DWm1pNDA1cjkwODNZVFl2eHMvL1hjQUtsODZiWittSDczZGYwb1BjU0RyMGlnVVZkMFd6QXgyblg5bk5hcnFUNWVZT1RQeDVnOFVoQlgyc1lIMS9NMllLUm5vbWFML21LUldkZ2Z6NDRiM0Z5elpQb3d4T2VJZ1Z2S09EWG94dUtaSmVINXRYVE9QYXovd09CSGFObU90NWNpUGtmOHNMM3VjL3h4cWtHdkdMSjJyL3pnSjZ6L0dwUzFnSElBREprVnpROXlKYXhMZGdtYW44MHIvemJkN29OeWJoSVB4WS9TaGN5aXZVV0w5STk4Q2NPTjR6TWwvdjNDOElPR2pqUE10eFhQZVV5ays4T0xSeGh0ZEoreEtUQWcwVVJWZFdWN0kzNXN4b2hwSWpZNDBpbkhieXhLOTRaeUNIdElvc1JkZWZHczd5L093RVZzcXJqRCs5K2grZ0o5ZUdaRi94TU1DZFdna2dXdmp0WDZIWUorYkIwOTlQK1JDcFBWK2pud3VVLzJDWGl4V2daaGNvbUtJM3RHUWR6R08ySVpDVXdna3lESXZzRWZGQmdtTHVOcE8rZXZOeUJYc1FzK2Rzc2dMaCtMWHZ2UmVoT21FY05jVENMQTF5WHE0MGVJV0daVytZR2QxNWhScFd2dHBaZnl1cG1GZXlrQm1ZV2pUQk5odUVsWWhFeUZHOExzdjl4WWJlcGIyWE5qUUR1RlFXbGpWMkRBT0tjcjdyblBqWHdMTzAyVk9sblhXbUdZdEZTL2RuMnFiN1NIOXl4SVo2ZzBCRVhRMGtRb3ZseDBxMDVXM3M0S3dRV1AxSC9Ba0NBcy84b0k3UW1DL21LYldUZ3pWYjkxMjFsL0hpelJMaWpSOWV1a3g0bUI5Y3lhK2ZSZ2FTTElXQkJDalNFSW4xWU1xbitydmhWSDV4Z0hQSmJWSUFiZTBnUUhGREtMV3U4bitoS2VOV0hMUlFVM1BaS1gzNlp0cUQraTNOSXlJcWorRHJuakQ0L25qWnU2ZUFEbllaZll3THNwakVSWVBJQ3Irazh3c3BYU0NXNXdqNHlHd2VwNjZkRDdSRmhUSlBGRFRza2YvL1lkZUJrVzlaazE5STdwenlVY2tqa01iWDVqVnFFMGxPNFhkZXMzU1JqOVBFSktpTVJlaUlBNW1QaGdmVllKMkJvR2E5aVlwMTZXa0Y2SlFJWkZpQWNZbzRhOVliRHd5cVRmcmNEMHdNTkVJc0NBZlR3eUJndmpRd1daZzVlK3hHZG01WWpqZ09OaGxTYURoVGNuLzM1NWttRklSSTdFalgvSHdjSVkwVUJHYU8xdUNiRjAvbWFmdWNnNzh1OGtyb09GeWo5NWFIa0tCY1lzdERJMXByNk0rVUdlYjd2bm1idVJkemZ4SEN4bE5BVUdEVVdjTGt0bDhrd2ovODB4TzJmSVpYNSsyOFBJSzRyUTJMUUdTK0ZNZWFnb2hmTFRoNHRTS0hEOTdVUUVpUVBrRFFWNXZQZlhDMGcvRHY0VjNaOWVYZ0FBQUFWSlJFRlVBQUFBLy8veXFrczJBQUFBQmtsRVFWUURBTDNYcXpuRFNqTzJBQUFBQUVsRlRrU3VRbUNDJzsKCmNvbnN0IFRJRVJTID0gWwogIHsgbWluOiAwLCAgbWF4OiA0LCAgIGxhYmVsOiAnVGllciAw4oCTMSDigJQgRWxpdGUgU3RhbmRpbmcnLCAgICAgICAgICBjb2xvcjogJyMxNmEzNGEnLCBiZzogJyNmMGZkZjQnIH0sCiAgeyBtaW46IDUsICBtYXg6IDksICAgbGFiZWw6ICdUaWVyIDEg4oCUIFJlYWxpZ25tZW50JywgICAgICAgICAgICAgICBjb2xvcjogJyM4NTRkMGUnLCBiZzogJyNmZWZjZTgnIH0sCiAgeyBtaW46IDEwLCBtYXg6IDE0LCAgbGFiZWw6ICdUaWVyIDIg4oCUIEFkbWluaXN0cmF0aXZlIExvY2tkb3duJywgICAgY29sb3I6ICcjYjQ1MzA5JywgYmc6ICcjZmZmN2VkJyB9LAogIHsgbWluOiAxNSwgbWF4OiAxOSwgIGxhYmVsOiAnVGllciAzIOKAlCBWZXJpZmljYXRpb24nLCAgICAgICAgICAgICAgY29sb3I6ICcjYzI0MTBjJywgYmc6ICcjZmZmN2VkJyB9LAogIHsgbWluOiAyMCwgbWF4OiAyNCwgIGxhYmVsOiAnVGllciA0IOKAlCBSaXNrIE1pdGlnYXRpb24nLCAgICAgICAgICAgY29sb3I6ICcjYjkxYzFjJywgYmc6ICcjZmVmMmYyJyB9LAogIHsgbWluOiAyNSwgbWF4OiAyOSwgIGxhYmVsOiAnVGllciA1IOKAlCBGaW5hbCBEZWNpc2lvbicsICAgICAgICAgICAgY29sb3I6ICcjOTkxYjFiJywgYmc6ICcjZmVmMmYyJyB9LAogIHsgbWluOiAzMCwgbWF4OiA5OTksIGxhYmVsOiAnVGllciA2IOKAlCBTZXBhcmF0aW9uJywgICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmZmZmJywgYmc6ICcjN2YxZDFkJyB9LApdOwoKZnVuY3Rpb24gZ2V0VGllcihwdHMpIHsKICByZXR1cm4gVElFUlMuZmluZCh0ID0+IHB0cyA+PSB0Lm1pbiAmJiBwdHMgPD0gdC5tYXgpIHx8IFRJRVJTWzBdOwp9CgpmdW5jdGlvbiBmbXQoZCkgewogIGlmICghZCkgcmV0dXJuICfigJQnOwogIHJldHVybiBuZXcgRGF0ZShkICsgJ1QxMjowMDowMCcpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7CiAgICB3ZWVrZGF5OiAnbG9uZycsIHllYXI6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgZGF5OiAnbnVtZXJpYycsCiAgICB0aW1lWm9uZTogJ0FtZXJpY2EvQ2hpY2FnbycsCiAgfSk7Cn0KCmZ1bmN0aW9uIGZtdERUKGQsIHQpIHsgcmV0dXJuIHQgPyBgJHtmbXQoZCl9IGF0ICR7dH1gIDogZm10KGQpOyB9CgpmdW5jdGlvbiBmaWVsZChsYWJlbCwgdmFsdWUpIHsKICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7CiAgcmV0dXJuIGAKICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPiR7bGFiZWx9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLXZhbHVlIj4ke3ZhbHVlfTwvZGl2PgogICAgPC9kaXY+YDsKfQoKZnVuY3Rpb24gYnVpbGRIdG1sKHYsIHNjb3JlKSB7CiAgY29uc3QgcHJpb3JQdHMgID0gc2NvcmUuYWN0aXZlX3BvaW50cyAgfHwgMDsKICBjb25zdCBwcmlvclRpZXIgPSBnZXRUaWVyKHByaW9yUHRzKTsKICBjb25zdCBuZXdUb3RhbCAgPSBwcmlvclB0cyArIHYucG9pbnRzOwogIGNvbnN0IG5ld1RpZXIgICA9IGdldFRpZXIobmV3VG90YWwpOwogIGNvbnN0IGVzY2FsYXRlZCA9IHByaW9yVGllci5sYWJlbCAhPT0gbmV3VGllci5sYWJlbDsKICBjb25zdCBnZW5BdCAgICAgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsKICAgIHRpbWVab25lOiAnQW1lcmljYS9DaGljYWdvJywgZGF0ZVN0eWxlOiAnZnVsbCcsIHRpbWVTdHlsZTogJ3Nob3J0JywKICB9KTsKICBjb25zdCBkb2NJZCA9IGBDUEFTLSR7di5pZC50b1N0cmluZygpLnBhZFN0YXJ0KDUsICcwJyl9YDsKCiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CjxzdHlsZT4KICAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9CgogIGJvZHkgewogICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sICdTZWdvZSBVSScsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6ICMxYTFhMmU7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgbGluZS1oZWlnaHQ6IDEuNTsKICB9CgogIC8qIOKUgOKUgCBIRUFERVIg4pSA4pSAICovCiAgLmhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMGEwYTBmIDAlLCAjMWExYTJlIDYwJSwgIzE2MjEzZSAxMDAlKTsKICAgIHBhZGRpbmc6IDI0cHggMzZweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNkNGFmMzc7CiAgfQogIC5oZWFkZXItbGVmdCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTZweDsgfQogIC5sb2dvIHsgaGVpZ2h0OiAzNnB4OyB9CiAgLmhlYWRlci10aXRsZSB7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBsZXR0ZXItc3BhY2luZzogMC4zcHg7CiAgfQogIC5oZWFkZXItc3ViIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiAjOTRhM2I4OwogICAgbWFyZ2luLXRvcDogM3B4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICB9CiAgLmhlYWRlci1yaWdodCB7IHRleHQtYWxpZ246IHJpZ2h0OyB9CiAgLmRvYy1pZCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6ICNkNGFmMzc7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgfQogIC5kb2MtbWV0YSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogIzY0NzQ4YjsKICAgIG1hcmdpbi10b3A6IDRweDsKICB9CgogIC8qIOKUgOKUgCBDT05GSURFTlRJQUwgQkFOTkVSIOKUgOKUgCAqLwogIC5jb25maWRlbnRpYWwtYmFyIHsKICAgIGJhY2tncm91bmQ6ICNmZWYyZjI7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2ZlY2FjYTsKICAgIHBhZGRpbmc6IDdweCAzNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjOTkxYjFiOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuOHB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICB9CgogIC8qIOKUgOKUgCBCT0RZIFdSQVBQRVIg4pSA4pSAICovCiAgLmJvZHkgeyBwYWRkaW5nOiAyOHB4IDM2cHg7IH0KCiAgLyog4pSA4pSAIFNFQ1RJT04g4pSA4pSAICovCiAgLnNlY3Rpb24geyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgLnNlY3Rpb24taGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICB9CiAgLnNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgY29sb3I6ICM2NDc0OGI7CiAgfQogIC5zZWN0aW9uLXJ1bGUgewogICAgZmxleDogMTsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogI2UyZThmMDsKICB9CgogIC8qIOKUgOKUgCBGSUVMRCBHUklEIOKUgOKUgCAqLwogIC5maWVsZC1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICBnYXA6IDEycHggMzJweDsKICB9CiAgLmZpZWxkLWdyaWQuc2luZ2xlIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0KICAuZmllbGQgeyBwYWRkaW5nOiAwOyB9CiAgLmZpZWxkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuOHB4OwogICAgY29sb3I6ICM5NGEzYjg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgfQogIC5maWVsZC12YWx1ZSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogIzFlMjkzYjsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgfQogIC5maWVsZC12YWx1ZS5wcm9taW5lbnQgewogICAgZm9udC1zaXplOiAxNXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMGYxNzJhOwogIH0KCiAgLyog4pSA4pSAIERFVEFJTCBCT1gg4pSA4pSAICovCiAgLmRldGFpbC1ib3ggewogICAgYmFja2dyb3VuZDogI2Y4ZmFmYzsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMmU4ZjA7CiAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICM2NjdlZWE7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6ICMzNzQxNTE7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KICAuZGV0YWlsLWJveC1sYWJlbCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIGNvbG9yOiAjOTRhM2I4OwogICAgbWFyZ2luLWJvdHRvbTogNnB4OwogIH0KCiAgLyog4pSA4pSAIFNDT1JFIENBUkQg4pSA4pSAICovCiAgLnNjb3JlLWNhcmQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDA7CiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOwogICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgbWFyZ2luLXRvcDogNHB4OwogIH0KICAuc2NvcmUtY2VsbCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMThweCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2UyZThmMDsKICB9CiAgLnNjb3JlLWNlbGw6bGFzdC1jaGlsZCB7IGJvcmRlci1yaWdodDogbm9uZTsgfQogIC5zY29yZS1jZWxsLm9wZXJhdG9yIHsKICAgIGZsZXg6IDAgMCA0OHB4OwogICAgZm9udC1zaXplOiAyNHB4OwogICAgZm9udC13ZWlnaHQ6IDIwMDsKICAgIGNvbG9yOiAjY2JkNWUxOwogIH0KICAuc2NvcmUtbnVtIHsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICB9CiAgLnNjb3JlLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogIzk0YTNiODsKICAgIG1hcmdpbi10b3A6IDRweDsKICB9CiAgLnRpZXItYmFkZ2UgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgbWFyZ2luLXRvcDogOHB4OwogICAgcGFkZGluZzogM3B4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICB9CgogIC8qIOKUgOKUgCBQT0lOVFMgUElMTCDilIDilIAgKi8KICAucG9pbnRzLXBpbGwgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgYmFja2dyb3VuZDogI2ZmZmJlYjsKICAgIGJvcmRlcjogMnB4IHNvbGlkICNkNGFmMzc7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogIH0KICAucG9pbnRzLXBpbGwtbnVtIHsKICAgIGZvbnQtc2l6ZTogNDJweDsKICAgIGZvbnQtd2VpZ2h0OiA5MDA7CiAgICBjb2xvcjogI2Q0YWYzNzsKICAgIGxpbmUtaGVpZ2h0OiAxOwogIH0KICAucG9pbnRzLXBpbGwtbGFiZWwgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6ICM5MjQwMGU7CiAgICBsaW5lLWhlaWdodDogMS40OwogIH0KICAucG9pbnRzLXBpbGwtbGFiZWwgc3Ryb25nIHsgZGlzcGxheTogYmxvY2s7IGZvbnQtc2l6ZTogMTRweDsgfQoKICAvKiDilIDilIAgRVNDQUxBVElPTiBBTEVSVCDilIDilIAgKi8KICAuZXNjYWxhdGlvbi1hbGVydCB7CiAgICBiYWNrZ3JvdW5kOiAjZmVmOWMzOwogICAgYm9yZGVyOiAxLjVweCBzb2xpZCAjZWFiMzA4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgbWFyZ2luLXRvcDogMTRweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiAjNzEzZjEyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgfQogIC5lc2NhbGF0aW9uLWljb24geyBmb250LXNpemU6IDE4cHg7IH0KCiAgLyog4pSA4pSAIFRJRVIgVEFCTEUg4pSA4pSAICovCiAgLnRpZXItdGFibGUgeyB3aWR0aDogMTAwJTsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgfQogIC50aWVyLXRhYmxlIHRoIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogIzk0YTNiODsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZTJlOGYwOwogIH0KICAudGllci10YWJsZSB0ZCB7CiAgICBwYWRkaW5nOiA3cHggMTJweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjFmNWY5OwogIH0KICAudGllci10YWJsZSB0ci5jdXJyZW50LXRpZXIgdGQgewogICAgYmFja2dyb3VuZDogI2ZmZmJlYjsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQogIC50aWVyLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogOHB4OyBoZWlnaHQ6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIG1hcmdpbi1yaWdodDogNnB4OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB9CgogIC8qIOKUgOKUgCBOT1RJQ0Ug4pSA4pSAICovCiAgLm5vdGljZSB7CiAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjM2I4MmY2OwogICAgYm9yZGVyLXJhZGl1czogMCA2cHggNnB4IDA7CiAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICBmb250LXNpemU6IDExLjVweDsKICAgIGNvbG9yOiAjMWU0MGFmOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICB9CgogIC8qIOKUgOKUgCBTSUdOQVRVUkUg4pSA4pSAICovCiAgLnNpZy1pbnRybyB7CiAgICBmb250LXNpemU6IDExLjVweDsKICAgIGNvbG9yOiAjNDc1NTY5OwogICAgbGluZS1oZWlnaHQ6IDEuNzsKICAgIG1hcmdpbi1ib3R0b206IDI4cHg7CiAgfQogIC5zaWctZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiA0OHB4OyB9CiAgLnNpZy1ibG9jayB7IH0KICAuc2lnLWxpbmUgewogICAgYm9yZGVyLWJvdHRvbTogMS41cHggc29saWQgIzMzNDE1NTsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIG1pbi1oZWlnaHQ6IDUycHg7CiAgfQogIC5zaWctbGluZS1sYWJlbCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIGNvbG9yOiAjNjQ3NDhiOwogIH0KICAuc2lnLWRhdGUtbGluZSB7CiAgICBib3JkZXItYm90dG9tOiAxLjVweCBzb2xpZCAjMzM0MTU1OwogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgbWFyZ2luLXRvcDogMjBweDsKICAgIG1pbi1oZWlnaHQ6IDM2cHg7CiAgfQoKICAvKiDilIDilIAgU0lHTkVEIEFDS05PV0xFREdNRU5UIOKUgOKUgCAqLwogIC5zaWctZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6ICNmMGZkZjQ7CiAgICBib3JkZXI6IDEuNXB4IHNvbGlkICMxNmEzNGE7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgfQogIC5zaWctZmlsbGVkLWJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMTU4MDNkOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgfQogIC5zaWctZmlsbGVkLW5hbWUgewogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiAjMTQ1MzJkOwogICAgbWFyZ2luLWJvdHRvbTogNHB4OwogIH0KICAuc2lnLWZpbGxlZC1tZXRhIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiAjNGI3YTVhOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICB9CgogIC8qIOKUgOKUgCBGT09URVIgQkFSIOKUgOKUgCAqLwogIC5mb290ZXItYmFyIHsKICAgIG1hcmdpbi10b3A6IDMycHg7CiAgICBwYWRkaW5nOiAxMHB4IDAgMDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTJlOGYwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6ICM5NGEzYjg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogIH0KPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KCjxkaXYgY2xhc3M9ImhlYWRlciI+CiAgPGRpdiBjbGFzcz0iaGVhZGVyLWxlZnQiPgogICAgPGltZyBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke0xPR09fQjY0fSIgY2xhc3M9ImxvZ28iIC8+CiAgICA8ZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItdGl0bGUiPkNQQVMgVmlvbGF0aW9uIFJlY29yZDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItc3ViIj5Db21wcmVoZW5zaXZlIFByb2Zlc3Npb25hbCBBY2NvdW50YWJpbGl0eSBTeXN0ZW08L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgogIDxkaXYgY2xhc3M9ImhlYWRlci1yaWdodCI+CiAgICA8ZGl2IGNsYXNzPSJkb2MtaWQiPiR7ZG9jSWR9PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkb2MtbWV0YSI+R2VuZXJhdGVkICR7Z2VuQXR9PC9kaXY+CiAgPC9kaXY+CjwvZGl2PgoKPGRpdiBjbGFzcz0iY29uZmlkZW50aWFsLWJhciI+4pqRIENvbmZpZGVudGlhbCDigJQgQXV0aG9yaXplZCBIUiAmYW1wOyBNYW5hZ2VtZW50IFVzZSBPbmx5PC9kaXY+Cgo8ZGl2IGNsYXNzPSJib2R5Ij4KCiAgPCEtLSBFbXBsb3llZSAtLT4KICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RW1wbG95ZWUgSW5mb3JtYXRpb248L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1ydWxlIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZmllbGQtZ3JpZCI+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1sYWJlbCI+RW1wbG95ZWUgTmFtZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLXZhbHVlIHByb21pbmVudCI+JHt2LmVtcGxveWVlX25hbWV9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmaWVsZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPkRlcGFydG1lbnQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LmRlcGFydG1lbnQgfHwgJ+KAlCd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmaWVsZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPlN1cGVydmlzb3I8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LnN1cGVydmlzb3IgfHwgJ+KAlCd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJmaWVsZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtbGFiZWwiPldpdG5lc3MgLyBEb2N1bWVudGluZyBPZmZpY2VyPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtdmFsdWUiPiR7di53aXRuZXNzX25hbWUgfHwgJ+KAlCd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CgogIDwhLS0gVmlvbGF0aW9uIC0tPgogIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WaW9sYXRpb24gRGV0YWlsczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXJ1bGUiPjwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmaWVsZC1ncmlkIj4KICAgICAgPGRpdiBjbGFzcz0iZmllbGQiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLWxhYmVsIj5WaW9sYXRpb248L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSBwcm9taW5lbnQiPiR7di52aW9sYXRpb25fbmFtZX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1sYWJlbCI+Q2F0ZWdvcnk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LmNhdGVnb3J5fTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iZmllbGQiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLWxhYmVsIj5JbmNpZGVudCBEYXRlIC8gVGltZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLXZhbHVlIj4ke2ZtdERUKHYuaW5jaWRlbnRfZGF0ZSwgdi5pbmNpZGVudF90aW1lKX08L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC1sYWJlbCI+U3VibWl0dGVkIEJ5PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmllbGQtdmFsdWUiPiR7di5zdWJtaXR0ZWRfYnkgfHwgJ1N5c3RlbSd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3YubG9jYXRpb24gPyBgCiAgICAgIDxkaXYgY2xhc3M9ImZpZWxkIiBzdHlsZT0iZ3JpZC1jb2x1bW46IDEgLyAtMTsiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpZWxkLWxhYmVsIj5Mb2NhdGlvbiAvIENvbnRleHQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWVsZC12YWx1ZSI+JHt2LmxvY2F0aW9ufTwvZGl2PgogICAgICA8L2Rpdj5gIDogJyd9CiAgICA8L2Rpdj4KICAgICR7di5kZXRhaWxzID8gYAogICAgPGRpdiBjbGFzcz0iZGV0YWlsLWJveCI+CiAgICAgIDxkaXYgY2xhc3M9ImRldGFpbC1ib3gtbGFiZWwiPkluY2lkZW50IE5vdGVzPC9kaXY+CiAgICAgICR7di5kZXRhaWxzfQogICAgPC9kaXY+YCA6ICcnfQogIDwvZGl2PgoKICA8IS0tIFBvaW50cyAtLT4KICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24taGVhZGVyIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q1BBUyBQb2ludCBBc3Nlc3NtZW50PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tcnVsZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJwb2ludHMtcGlsbCI+CiAgICAgIDxkaXYgY2xhc3M9InBvaW50cy1waWxsLW51bSI+JHt2LnBvaW50c308L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icG9pbnRzLXBpbGwtbGFiZWwiPgogICAgICAgIDxzdHJvbmc+UG9pbnRzIEFzc2Vzc2VkPC9zdHJvbmc+CiAgICAgICAgVGhpcyB2aW9sYXRpb24KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzY29yZS1jYXJkIj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY2VsbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtbnVtIiBzdHlsZT0iY29sb3I6JHtwcmlvclRpZXIuY29sb3J9OyI+JHtwcmlvclB0c308L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1sYWJlbCI+UHJpb3IgQWN0aXZlIFBvaW50czwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJ0aWVyLWJhZGdlIiBzdHlsZT0iYmFja2dyb3VuZDoke3ByaW9yVGllci5iZ307IGNvbG9yOiR7cHJpb3JUaWVyLmNvbG9yfTsiPgogICAgICAgICAgJHtwcmlvclRpZXIubGFiZWx9CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY2VsbCBvcGVyYXRvciI+KzwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzY29yZS1jZWxsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1udW0iIHN0eWxlPSJjb2xvcjojZDRhZjM3OyI+JHt2LnBvaW50c308L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzY29yZS1sYWJlbCI+VGhpcyBWaW9sYXRpb248L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNjb3JlLWNlbGwgb3BlcmF0b3IiPj08L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtY2VsbCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtbnVtIiBzdHlsZT0iY29sb3I6JHtuZXdUaWVyLmNvbG9yfTsiPiR7bmV3VG90YWx9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2NvcmUtbGFiZWwiPk5ldyBBY3RpdmUgVG90YWw8L2Rpdj4KICAgICAgICA8c3BhbiBjbGFzcz0idGllci1iYWRnZSIgc3R5bGU9ImJhY2tncm91bmQ6JHtuZXdUaWVyLmJnfTsgY29sb3I6JHtuZXdUaWVyLmNvbG9yfTsiPgogICAgICAgICAgJHtuZXdUaWVyLmxhYmVsfQogICAgICAgIDwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICAke2VzY2FsYXRlZCA/IGAKICAgIDxkaXYgY2xhc3M9ImVzY2FsYXRpb24tYWxlcnQiPgogICAgICA8c3BhbiBjbGFzcz0iZXNjYWxhdGlvbi1pY29uIj7imqA8L3NwYW4+CiAgICAgIDxkaXY+CiAgICAgICAgPHN0cm9uZz5UaWVyIEVzY2FsYXRpb246PC9zdHJvbmc+CiAgICAgICAgVGhpcyB2aW9sYXRpb24gYWR2YW5jZXMgdGhlIGVtcGxveWVlIGZyb20gPHN0cm9uZz4ke3ByaW9yVGllci5sYWJlbH08L3N0cm9uZz4KICAgICAgICB0byA8c3Ryb25nPiR7bmV3VGllci5sYWJlbH08L3N0cm9uZz4uCiAgICAgIDwvZGl2PgogICAgPC9kaXY+YCA6ICcnfQogIDwvZGl2PgoKICA8IS0tIFRpZXIgUmVmZXJlbmNlIC0tPgogIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1oZWFkZXIiPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DUEFTIFRpZXIgUmVmZXJlbmNlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tcnVsZSI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDx0YWJsZSBjbGFzcz0idGllci10YWJsZSI+CiAgICAgIDx0aGVhZD4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGg+UG9pbnRzPC90aD4KICAgICAgICAgIDx0aD5UaWVyICZhbXA7IFN0YW5kaW5nPC90aD4KICAgICAgICA8L3RyPgogICAgICA8L3RoZWFkPgogICAgICA8dGJvZHk+CiAgICAgICAgJHtUSUVSUy5tYXAodCA9PiB7CiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBuZXdUb3RhbCA+PSB0Lm1pbiAmJiBuZXdUb3RhbCA8PSB0Lm1heDsKICAgICAgICAgIGNvbnN0IHJhbmdlICA9IHQubWluID09PSAzMCA/ICczMCsnIDogYCR7dC5taW594oCTJHt0Lm1heH1gOwogICAgICAgICAgcmV0dXJuIGA8dHIgY2xhc3M9IiR7YWN0aXZlID8gJ2N1cnJlbnQtdGllcicgOiAnJ30iPgogICAgICAgICAgICA8dGQ+JHthY3RpdmUgPyAn4pa2ICcgOiAnJ30ke3JhbmdlfTwvdGQ+CiAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGllci1kb3QiIHN0eWxlPSJiYWNrZ3JvdW5kOiR7dC5jb2xvciA9PT0gJyNmZmZmZmYnID8gdC5iZyA6IHQuY29sb3J9OyI+PC9zcGFuPgogICAgICAgICAgICAgICR7dC5sYWJlbH0KICAgICAgICAgICAgICAke2FjdGl2ZSA/ICc8c3Ryb25nPiDihpAgQ3VycmVudDwvc3Ryb25nPicgOiAnJ30KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+YDsKICAgICAgICB9KS5qb2luKCcnKX0KICAgICAgPC90Ym9keT4KICAgIDwvdGFibGU+CiAgPC9kaXY+CgogIDwhLS0gTm90aWNlIC0tPgogIDxkaXYgY2xhc3M9Im5vdGljZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjRweDsiPgogICAgPHN0cm9uZz5FbXBsb3llZSBOb3RpY2U6PC9zdHJvbmc+IENQQVMgcG9pbnRzIHJlbWFpbiBhY3RpdmUgZm9yIGEgcm9sbGluZyA5MC1kYXkgcGVyaW9kIGZyb20gdGhlIGRhdGUgb2YgZWFjaCBpbmNpZGVudC4KICAgIEFjY3VtdWxhdGlvbiBvZiBwb2ludHMgbWF5IHJlc3VsdCBpbiB0aWVyIGVzY2FsYXRpb24gYW5kIGFzc29jaWF0ZWQgY29uc2VxdWVuY2VzIGFzIG91dGxpbmVkIGluIHRoZSBFbXBsb3llZSBIYW5kYm9vay4KICAgIFRoZSBlbXBsb3llZSBtYXkgc3VibWl0IGEgd3JpdHRlbiByZXNwb25zZSB3aXRoaW4gNSBidXNpbmVzcyBkYXlzIG9mIHJlY2VpdmluZyB0aGlzIGRvY3VtZW50LgogIDwvZGl2PgoKICA8IS0tIFNpZ25hdHVyZXMgLS0+CiAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWhlYWRlciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkFja25vd2xlZGdlbWVudCAmYW1wOyBTaWduYXR1cmVzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tcnVsZSI+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxwIGNsYXNzPSJzaWctaW50cm8iPgogICAgICBCeSBzaWduaW5nIGJlbG93LCB0aGUgZW1wbG95ZWUgYWNrbm93bGVkZ2VzIHJlY2VpcHQgb2YgdGhpcyB2aW9sYXRpb24gcmVjb3JkLgogICAgICBBY2tub3dsZWRnZW1lbnQgZG9lcyBub3QgaW1wbHkgYWdyZWVtZW50IHdpdGggdGhlIHZpb2xhdGlvbiBhcyBkb2N1bWVudGVkLgogICAgPC9wPgogICAgPGRpdiBjbGFzcz0ic2lnLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJzaWctYmxvY2siPgogICAgICAgICR7di5hY2tub3dsZWRnZWRfYnkgPyBgCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWZpbGxlZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZmlsbGVkLWJhZGdlIj7inJQgQWNrbm93bGVkZ2VkPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZmlsbGVkLW5hbWUiPiR7di5hY2tub3dsZWRnZWRfYnl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZmlsbGVkLW1ldGEiPlByaW50ZWQgTmFtZSAmbmJzcDvCtyZuYnNwOyAke3YuYWNrbm93bGVkZ2VkX2F0ID8gZm10KHYuYWNrbm93bGVkZ2VkX2F0KSA6ICdEYXRlIG5vdCByZWNvcmRlZCd9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWxpbmUtbGFiZWwiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7Ij5FbXBsb3llZSBBY2tub3dsZWRnbWVudDwvZGl2PgogICAgICAgIGAgOiBgCiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWxpbmUiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZy1saW5lLWxhYmVsIj5FbXBsb3llZSBTaWduYXR1cmU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWctZGF0ZS1saW5lIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWctbGluZS1sYWJlbCI+RGF0ZTwvZGl2PgogICAgICAgIGB9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzaWctYmxvY2siPgogICAgICAgIDxkaXYgY2xhc3M9InNpZy1saW5lIj48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWctbGluZS1sYWJlbCI+U3VwZXJ2aXNvciAvIERvY3VtZW50aW5nIE9mZmljZXIgU2lnbmF0dXJlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWRhdGUtbGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lnLWxpbmUtbGFiZWwiPkRhdGU8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0iZm9vdGVyLWJhciI+CiAgICA8c3Bhbj4ke2RvY0lkfSAmbmJzcDvCtyZuYnNwOyAke3YuZW1wbG95ZWVfbmFtZX0gJm5ic3A7wrcmbmJzcDsgSW5jaWRlbnQ6ICR7di5pbmNpZGVudF9kYXRlfTwvc3Bhbj4KICAgIDxzcGFuPk1lc3NhZ2UgUG9pbnQgTWVkaWEg4oCUIEludGVybmFsIFVzZSBPbmx5PC9zcGFuPgogIDwvZGl2PgoKPC9kaXY+CjwvYm9keT4KPC9odG1sPmA7Cn0KCm1vZHVsZS5leHBvcnRzID0gYnVpbGRIdG1sOwo=
\ No newline at end of file