Ring Area Calculator – Find the Area of a Circular Ring Easily

 

In geometry, we often deal with simple shapes like circles, squares, and triangles. But sometimes, we need to measure the area of a shape that looks like a donut or a washer. This shape is called a ring or annulus. It is formed when a smaller circle is removed from the center of a larger circle.

A Ring Area Calculator helps you find the area of this hollow circular region quickly and accurately. Instead of doing manual calculations with formulas, you can simply enter the inner and outer radius, and the calculator gives you the answer instantly. This tool is useful for students, engineers, designers, and anyone working with circular objects.

What a Circular Ring (Annulus) Is

Understanding the Shape

A circular ring is the region between two concentric circles, which means both circles share the same center. The larger circle has an outer radius (R), and the smaller circle has an inner radius (r). The space between them forms the ring.

Real-World Examples

You can see circular rings in many everyday objects such as washers, pipe cross-sections, road tracks, tree rings, and even donuts. These shapes may look simple, but calculating their area is important in many practical situations.

Related Calculator:  Parking Area Calculator — Estimate Lot Size & Capacity Easily

How the Ring Area Calculator Works

Inputs Required

The calculator usually asks for:

  • Outer radius (R)

  • Inner radius (r)

Some calculators also allow you to enter the diameter, which is then converted into radius automatically.

Output Provided

After entering the values, the calculator shows:

  • Area of the circular ring

Why the Calculator Is Helpful

Manual calculations can take time and may lead to mistakes. The calculator saves effort, ensures accuracy, and gives instant results for any size of ring.

Key Formula for Ring Area

Main Formula

A = \pi (R^2 - r^2)

This formula means you subtract the area of the smaller circle from the area of the larger circle.

Expanded Form

A = \pi (R + r)(R - r)

Diameter to Radius Conversion

R = \frac{D}{2}, \quad r = \frac{d}{2}

These formulas are used by the calculator to give you accurate results.

Step-by-Step Example

Example 1: Using Radii

Suppose:

  • Outer radius R = 10 cm

  • Inner radius r = 6 cm

Apply the formula:

A = \pi (10^2 - 6^2) A = \pi (100 - 36) A = \pi \times 64 A \approx 201.06 , cm^2

So, the area of the ring is 201.06 square centimeters.

Example 2: Using Diameters

If the outer diameter is 20 cm and the inner diameter is 8 cm:

R = 10, \quad r = 4 A = \pi (10^2 - 4^2) A = \pi (100 - 16) = 84\pi A \approx 263.89 , cm^2

Features of a Ring Area Calculator

Fast Results

The calculator provides instant answers without manual effort.

Related Calculator:  Second Moment of Area Calculator – Quick Structural Section MOI Tool

Simple Inputs

You only need to enter radius or diameter values.

Accurate Output

It uses standard geometry formulas for precise results.

Easy to Use

The interface is user-friendly, even for beginners.

Uses and Applications

Ring area calculations are very important in engineering and manufacturing. When designing washers, seals, pipes, or hollow metal parts, engineers must know how much material is needed. The ring area helps them estimate weight, strength, and cost. Without this information, it would be difficult to produce accurate and safe products.

In construction and architecture, circular rings appear in pillars, water tanks, circular tracks, and curved structures. Architects use ring area calculations to plan material usage and design strong foundations. The calculator helps them quickly find the required measurements without complex math.

Ring area is also useful in science and education. Students use it to learn geometry concepts, while scientists use it to study circular cross-sections in physics and biology. From tree rings to microscope samples, knowing the area of a ring helps in research and analysis.

Tips for Accurate Results

Measure Correctly

Always measure the radius from the center of the circle.

Use the Same Units

Keep all measurements in centimeters, meters, or inches.

Check Inner and Outer Values

Make sure the outer radius is larger than the inner radius.

Related Calculator:  Effective Projected Area Calculator — Flow & Drag Area Estimator

Avoid Rounding Early

Let the calculator handle decimal values for better precision.

Common Mistakes to Avoid

Confusing Radius and Diameter

Remember, radius is half of the diameter.

Swapping R and r

The outer radius must always be bigger than the inner radius.

Ignoring Units

Mixing units can lead to wrong results.

Using Circle Area Instead of Ring Area

A ring is not a full circle. Always subtract the inner area.

Frequently Asked Questions

What is a circular ring?

It is the area between two concentric circles.

What is the formula for ring area?

A = \pi (R^2 - r^2)

Can I use diameters instead of radii?

Yes, just divide the diameter by 2.

Is this used in real life?

Yes, in engineering, construction, and manufacturing.

Is the calculator accurate?

Yes, it uses standard mathematical formulas.

Final Words

The Ring Area Calculator is a simple and powerful tool for finding the area of a circular ring. It removes the need for long calculations and helps you get quick, accurate results.

Whether you are a student learning geometry or a professional working with circular designs, this calculator makes your work easier. By understanding the formula and using the tool correctly, you can solve ring area problems with confidence and speed.

Similar Posts

  • Prism Lateral Area Calculator – Calculate Side Surface Area Quickly

    Prism Lateral Surface Area Calculator Lateral Area Calc Calculate the area of the vertical sides (Walls) only. Base Shape Rectangle (Room) Triangle Regular Polygon Prism Height (h) ftinmcm 🎨 Painter’s Mode ▼ Coverage per Gallon/Unit sq units/gal Lateral Surface Area (Walls) — sq ft Paint Needed (Est.) — gallons Work Shown   In geometry, three-dimensional…

  • Gable Roof Area Calculator — Calculate Roof Surface Area & Materials

    Gable Roof Area Calculator Gable Roof Calculator Area, Squares & Rafters House Length (ft) House Width (ft) Roof Pitch (Rise / 12) Flat (0:12)Low Slope (2:12)4:126:12 (Standard)8:1210:1212:12 (45°)18:12 (Steep) Overhang Sides (in) Overhang Ends (in) Multiplier: — Calculated from Pitch setting. Total Roof Area — sq ft Roofing Squares — — bundles Common Rafter Length…

  • Area Using Integration Calculator – Compute Area Under Curves Easily

    // Base64 Content var b64 = “PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPHRpdGxlPkFyZWEgVXNpbmcgSW50ZWdyYXRpb24gQ2FsY3VsYXRvcjwvdGl0bGU+CiAgICA8c3R5bGU+CiAgICAgICAgOnJvb3QgewogICAgICAgICAgICAtLXByaW1hcnk6ICM1YzZiYzA7CiAgICAgICAgICAgIC8qIEluZGlnbyAqLwogICAgICAgICAgICAtLXByaW1hcnktbGlnaHQ6ICM5ZmE4ZGE7CiAgICAgICAgICAgIC0tc2Vjb25kYXJ5OiAjMjZhNjlhOwogICAgICAgICAgICAvKiBUZWFsICovCiAgICAgICAgICAgIC0tYmctcGFnZTogI2U4ZWFmNjsKICAgICAgICAgICAgLS1iZy1jYXJkOiAjZmZmZmZmOwogICAgICAgICAgICAtLXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDgpOwogICAgICAgICAgICAtLWJvcmRlcjogI2UwZTBlMDsKICAgICAgICB9CgogICAgICAgICogewogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWY7CiAgICAgICAgfQoKICAgICAgICBib2R5IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmctcGFnZSk7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgcGFkZGluZzogMzBweCAxNXB4OwogICAgICAgIH0KCiAgICAgICAgLmNhbGMtY2FyZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLWNhcmQpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgbWF4LXdpZHRoOiA4NTBweDsKICAgICAgICAgICAgcGFkZGluZzogMzBweDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgICAgZ2FwOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmhlYWRlciBoMiB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgY29sb3I6ICMzMzM7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgICB9CgogICAgICAgIC5oZWFkZXIgcCB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgY29sb3I6ICM3Nzc7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTsKICAgICAgICB9CgogICAgICAgIC8qIFNoYXBlIFNlbGVjdG9yICovCiAgICAgICAgLnNoYXBlLWdyaWQgewogICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCAxZnIpOwogICAgICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgICAgfQoKICAgICAgICAuc2hhcGUtYnRuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y1ZjVmNTsKICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIHRyYW5zaXRpb246IDAuMnM7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNXB4OwogICAgICAgIH0KCiAgICAgICAgLnNoYXBlLWJ0bjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlOGVhZjY7CiAgICAgICAgfQoKICAgICAgICAuc2hhcGUtYnRuLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeSk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDkyLCAxMDcsIDE5MiwgMC4yKTsKICAgICAgICB9CgogICAgICAgIC5zaGFwZS1pY29uIHsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW07CiAgICAgICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5KTsKICAgICAgICB9CgogICAgICAgIC5zaGFwZS1sYWJlbCB7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICAgIGNvbG9yOiAjNTU1OwogICAgICAgICAgICBmb250LXNpemU6IDAuOTVyZW07CiAgICAgICAgfQoKICAgICAgICAvKiBJbnB1dHMgKi8KICAgICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDAuM3M7CiAgICAgICAgfQoKICAgICAgICAuaW5wdXQtd3JhcHBlci5hY3RpdmUgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB9CgogICAgICAgIC5pbnB1dC1yb3cgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDE1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgfQoKICAgICAgICAuaW5wdXQtZ3JvdXAgbGFiZWwgewogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBjb2xvcjogIzQ0NDsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgfQoKICAgICAgICBpbnB1dCB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsKICAgICAgICB9CgogICAgICAgIC5idG4tY2FsYyB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5KTsKICAgICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzMHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICB0cmFuc2l0aW9uOiAwLjJzOwogICAgICAgIH0KCiAgICAgICAgLmJ0bi1jYWxjOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzM5NDlhYjsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgICAgIH0KCiAgICAgICAgLyogRWR1Y2F0aW9uYWwgQ29udGVudCAqLwogICAgICAgIC5lZHUtc3BsaXQgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CgogICAgICAgIC5zdGVwcy1wYW5lbCB7CiAgICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmYWZhZmE7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgICB9CgogICAgICAgIC52aXMtcGFuZWwgewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgICAgICAgICBoZWlnaHQ6IDM1MHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfQoKICAgICAgICAuc3RlcC1oZWFkZXIgewogICAgICAgICAgICBmb250LXNpemU6IDEuMXJlbTsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnkpOwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcHJpbWFyeS1saWdodCk7CiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgfQoKICAgICAgICAuc3RlcC1saW5lIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAxLjFyZW07CiAgICAgICAgICAgIGNvbG9yOiAjMzMzOwogICAgICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIH0KCiAgICAgICAgLnN0ZXAtZXhwbCB7CiAgICAgICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgICAgICBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICB9CgogICAgICAgIGNhbnZhcyB7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7CiAgICAgICAgICAgIGZyb20gewogICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdG8gewogICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIDwvc3R5bGU+CjwvaGVhZD4KCjxib2R5PgoKICAgIDxkaXYgY2xhc3M9ImNhbGMtY2FyZCI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGgyPkFyZWEgVXNpbmcgSW50ZWdyYXRpb24gQ2FsY3VsYXRvcjwvaDI+CiAgICAgICAgICAgIDxwPkxlYXJuIGhvdyBjYWxjdWx1cyBjYWxjdWxhdGVzIHNwZWNpZmljIGFyZWFzIHN0ZXAtYnktc3RlcC48L3A+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gU2hhcGUgU2VsZWN0aW9uIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InNoYXBlLWdyaWQiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFwZS1idG4gYWN0aXZlIiBvbmNsaWNrPSJzZXRNb2RlKCdjaXJjbGUnKSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcGUtaWNvbiI+4q2VPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXBlLWxhYmVsIj5DaXJjbGU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFwZS1idG4iIG9uY2xpY2s9InNldE1vZGUoJ3RyaWFuZ2xlJykiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNoYXBlLWljb24iPvCflLo8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcGUtbGFiZWwiPlRyaWFuZ2xlPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhcGUtYnRuIiBvbmNsaWNrPSJzZXRNb2RlKCdjdXN0b20nKSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hhcGUtaWNvbiI+8J+TiDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaGFwZS1sYWJlbCI+Q3VzdG9tIGYoeCk8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIElucHV0czogQ2lyY2xlIC0tPgogICAgICAgIDxkaXYgaWQ9ImlucF9jaXJjbGUiIGNsYXNzPSJpbnB1dC13cmFwcGVyIGFjdGl2ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KICAgICAgICAgICAgICAgIDxsYWJlbD5SYWRpdXMgKHIpPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJjX3IiIHZhbHVlPSI1IiBwbGFjZWhvbGRlcj0iRW50ZXIgcmFkaXVzIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gSW5wdXRzOiBUcmlhbmdsZSAtLT4KICAgICAgICA8ZGl2IGlkPSJpbnBfdHJpYW5nbGUiIGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtcm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QmFzZSAoYik8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJ0X2IiIHZhbHVlPSIxMCI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+SGVpZ2h0IChoKTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9InRfaCIgdmFsdWU9IjUiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIElucHV0czogQ3VzdG9tIC0tPgogICAgICAgIDxkaXYgaWQ9ImlucF9jdXN0b20iIGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgogICAgICAgICAgICAgICAgPGxhYmVsPkZ1bmN0aW9uIGYoeCk8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJjdXN0X2Z4IiB2YWx1ZT0ieF4yIiBwbGFjZWhvbGRlcj0iZS5nLiB4XjIiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtcm93IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIiBzdHlsZT0iZmxleDoxIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+U3RhcnQgeDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImN1c3RfYSIgdmFsdWU9IjAiPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCIgc3R5bGU9ImZsZXg6MSI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkVuZCB4PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBpZD0iY3VzdF9iIiB2YWx1ZT0iMiI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxidXR0b24gY2xhc3M9ImJ0bi1jYWxjIiBvbmNsaWNrPSJjYWxjdWxhdGUoKSI+VmlzdWFsaXplICYgQ2FsY3VsYXRlPC9idXR0b24+CgogICAgICAgIDxkaXYgY2xhc3M9ImVkdS1zcGxpdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXBzLXBhbmVsIiBpZD0ic3RlcHNfb3V0Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtaGVhZGVyIj5EZXJpdmF0aW9uIFN0ZXBzPC9kaXY+CiAgICAgICAgICAgICAgICA8cCBzdHlsZT0iY29sb3I6Izc3NyI+Q2xpY2sgQ2FsY3VsYXRlIHRvIHNlZSB0aGUgcHJvb2YuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlzLXBhbmVsIj4KICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9ImNhbnZhcyI+PC9jYW52YXM+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgICAgLyogLS0tIE1hdGggRW5naW5lIC0tLSAqLwogICAgICAgIGNvbnN0IE1hdGhFbmdpbmUgPSAoKCkgPT4gewogICAgICAgICAgICBjb25zdCBUID0geyBOOiAxLCBJOiAyLCBPcDogMywgTFA6IDQsIFJQOiA1LCBFT0Y6IDYgfTsKICAgICAgICAgICAgZnVuY3Rpb24gdG9rKHMpIHsgY29uc3QgdCA9IFtdOyBsZXQgaSA9IDA7IHdoaWxlIChpIDwgcy5sZW5ndGgpIHsgY29uc3QgYyA9IHNbaV07IGlmICgvXHMvLnRlc3QoYykpIHsgaSsrOyBjb250aW51ZTsgfSBpZiAoL1swLTkuXS8udGVzdChjKSkgeyBsZXQgbiA9ICcnOyB3aGlsZSAoaSA8IHMubGVuZ3RoICYmIC9bMC05Ll0vLnRlc3Qoc1tpXSkpIG4gKz0gc1tpKytdOyB0LnB1c2goeyB0eXBlOiBULk4sIHZpczogcGFyc2VGbG9hdChuKSB9KTsgfSBlbHNlIGlmICgvW2Etel0vLnRlc3QoYykpIHsgbGV0IGlkID0gJyc7IHdoaWxlIChpIDwgcy5sZW5ndGggJiYgL1thLXowLTldLy50ZXN0KHNbaV0pKSBpZCArPSBzW2krK107IHQucHVzaCh7IHR5cGU6IFQuSSwgdmlzOiBpZC50b0xvd2VyQ2FzZSgpIH0pOyB9IGVsc2UgaWYgKCcrLSovXicuaW5jbHVkZXMoYykpIHsgdC5wdXNoKHsgdHlwZTogVC5PcCwgdmlzOiBjIH0pOyBpKys7IH0gZWxzZSBpZiAoYyA9PT0gJygnKSB7IHQucHVzaCh7IHR5cGU6IFQuTFAgfSk7IGkrKzsgfSBlbHNlIGlmIChjID09PSAnKScpIHsgdC5wdXNoKHsgdHlwZTogVC5SUCB9KTsgaSsrOyB9IGVsc2UgaSsrOyB9IHQucHVzaCh7IHR5cGU6IFQuRU9GIH0pOyByZXR1cm4gdDsgfQogICAgICAgICAgICBjbGFzcyBQIHsKICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKHRzKSB7IHRoaXMudHMgPSB0czsgdGhpcy5wID0gMDsgfSBwZWVrKCkgeyByZXR1cm4gdGhpcy50c1t0aGlzLnBdOyB9IGNvbnN1bWUoKSB7IHJldHVybiB0aGlzLnRzW3RoaXMucCsrXTsgfSBwYXJzZSgpIHsgcmV0dXJuIHRoaXMuRSgpOyB9CiAgICAgICAgICAgICAgICBFKCkgeyBsZXQgbCA9IHRoaXMuVGVtKCk7IHdoaWxlICh0aGlzLnBlZWsoKS52aXMgPT09ICcrJyB8fCB0aGlzLnBlZWsoKS52aXMgPT09ICctJykgeyBjb25zdCBvID0gdGhpcy5jb25zdW1lKCkudmlzOyBsID0geyB0eXBlOiAnQicsIG9wOiBvLCBsLCByOiB0aGlzLlRlbSgpIH07IH0gcmV0dXJuIGw7IH0KICAgICAgICAgICAgICAgIFRlbSgpIHsgbGV0IGwgPSB0aGlzLkZhYygpOyB3aGlsZSAodGhpcy5wZWVrKCkudmlzID09PSAnKicgfHwgdGhpcy5wZWVrKCkudmlzID09PSAnLycpIHsgY29uc3QgbyA9IHRoaXMuY29uc3VtZSgpLnZpczsgbCA9IHsgdHlwZTogJ0InLCBvcDogbywgbCwgcjogdGhpcy5GYWMoKSB9OyB9IHJldHVybiBsOyB9CiAgICAgICAgICAgICAgICBGYWMoKSB7IGxldCBsID0gdGhpcy5CYXMoKTsgaWYgKHRoaXMucGVlaygpLnZpcyA9PT0gJ14nKSB7IHRoaXMuY29uc3VtZSgpOyBsID0geyB0eXBlOiAnQicsIG9wOiAnXicsIGwsIHI6IHRoaXMuRmFjKCkgfTsgfSByZXR1cm4gbDsgfQogICAgICAgICAgICAgICAgQmFzKCkgeyBjb25zdCB0ID0gdGhpcy5wZWVrKCk7IGlmICh0LnR5cGUgPT09IFQuTikgcmV0dXJuIHsgdHlwZTogJ0wnLCB2OiB0aGlzLmNvbnN1bWUoKS52aXMgfTsgaWYgKHQudHlwZSA9PT0gVC5JKSB7IGNvbnN0IG4gPSB0aGlzLmNvbnN1bWUoKS52aXM7IGlmICh0aGlzLnBlZWsoKS50eXBlID09PSBULkxQKSB7IHRoaXMuY29uc3VtZSgpOyBjb25zdCBhID0gdGhpcy5FKCk7IHRoaXMuY29uc3VtZSgpOyByZXR1cm4geyB0eXBlOiAnQycsIG4sIGEgfTsgfSBpZiAobiA9PT0gJ3gnKSByZXR1cm4geyB0eXBlOiAnVicgfTsgcmV0dXJuIHsgdHlwZTogJ0wnLCB2OiAwIH07IH0gaWYgKHQudHlwZSA9PT0gVC5MUCkgeyB0aGlzLmNvbnN1bWUoKTsgY29uc3QgZSA9IHRoaXMuRSgpOyB0aGlzLmNvbnN1bWUoKTsgcmV0dXJuIGU7IH0gaWYgKHQudmlzID09PSAnLScpIHsgdGhpcy5jb25zdW1lKCk7IHJldHVybiB7IHR5cGU6ICdVJywgb3A6ICctJywgYTogdGhpcy5CYXMoKSB9OyB9IHRoaXMuY29uc3VtZSgpOyByZXR1cm4geyB0eXBlOiAnTCcsIHY6IDAgfTsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uIGV2KG4sIHgpIHsgaWYgKCFuKSByZXR1cm4gMDsgaWYgKG4udHlwZSA9PT0gJ0wnKSByZXR1cm4gbi52OyBpZiAobi50eXBlID09PSAnVicpIHJldHVybiB4OyBpZiAobi50eXBlID09PSAnQicpIHsgY29uc3QgbCA9IGV2KG4ubCwgeCksIHIgPSBldihuLnIsIHgpOyBzd2l0Y2ggKG4ub3ApIHsgY2FzZSAnKyc6IHJldHVybiBsICsgcjsgY2FzZSAnLSc6IHJldHVybiBsIC0gcjsgY2FzZSAnKic6IHJldHVybiBsICogcjsgY2FzZSAnLyc6IHJldHVybiBsIC8gcjsgY2FzZSAnXic6IHJldHVybiBNYXRoLnBvdyhsLCByKTsgfSB9IGlmIChuLnR5cGUgPT09ICdVJykgcmV0dXJuIC1ldihuLmEsIHgpOyBpZiAobi50eXBlID09PSAnQycpIHsgY29uc3QgYSA9IGV2KG4uYSwgeCk7IHN3aXRjaCAobi5uKSB7IGNhc2UgJ3Npbic6IHJldHVybiBNYXRoLnNpbihhKTsgY2FzZSAnY29zJzogcmV0dXJuIE1hdGguY29zKGEpOyBjYXNlICd0YW4nOiByZXR1cm4gTWF0aC50YW4oYSk7IGNhc2UgJ3NxcnQnOiByZXR1cm4gTWF0aC5zcXJ0KGEpOyBjYXNlICdhYnMnOiByZXR1cm4gTWF0aC5hYnMoYSk7IGNhc2UgJ2xuJzogcmV0dXJuIE1hdGgubG9nKGEpOyB9IH0gcmV0dXJuIDA7IH0KICAgICAgICAgICAgcmV0dXJuIHsgYzogcyA9PiB7IHRyeSB7IGNvbnN0IGFzdCA9IG5ldyBQKHRvayhzKSkucGFyc2UoKTsgcmV0dXJuIHggPT4gZXYoYXN0LCB4KTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfSB9IH07CiAgICAgICAgfSkoKTsKCiAgICAgICAgbGV0IGN1ck1vZGUgPSAnY2lyY2xlJzsKCiAgICAgICAgZnVuY3Rpb24gc2V0TW9kZShtKSB7CiAgICAgICAgICAgIGN1ck1vZGUgPSBtOwogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hhcGUtYnRuJykuZm9yRWFjaChiID0+IGIuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpOwogICAgICAgICAgICBjb25zdCBpZHggPSBtID09PSAnY2lyY2xlJyA/IDAgOiBtID09PSAndHJpYW5nbGUnID8gMSA6IDI7CiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zaGFwZS1idG4nKVtpZHhdLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwoKICAgICAgICAgICAgWydpbnBfY2lyY2xlJywgJ2lucF90cmlhbmdsZScsICdpbnBfY3VzdG9tJ10uZm9yRWFjaChpZCA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJykpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW5wXycgKyBtKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKCiAgICAgICAgICAgIC8vIFJlc2V0IHN0ZXBzCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwc19vdXQnKS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0ic3RlcC1oZWFkZXIiPkRlcml2YXRpb24gU3RlcHM8L2Rpdj48cCBzdHlsZT0iY29sb3I6Izc3NyI+Q2xpY2sgQ2FsY3VsYXRlIHRvIHNlZSB0aGUgcHJvb2YuPC9wPic7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGUoKSB7CiAgICAgICAgICAgIGNvbnN0IHN0ZXBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0ZXBzX291dCcpOwogICAgICAgICAgICBzdGVwcy5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0ic3RlcC1oZWFkZXIiPkludGVncmFsIERlcml2YXRpb248L2Rpdj4nOwoKICAgICAgICAgICAgbGV0IHNoYXBlRGF0YSA9IHt9OwoKICAgICAgICAgICAgaWYgKGN1ck1vZGUgPT09ICdjaXJjbGUnKSB7CiAgICAgICAgICAgICAgICBjb25zdCByID0gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY19yJykudmFsdWUpOwogICAgICAgICAgICAgICAgaWYgKGlzTmFOKHIpIHx8IHIgPD0gMCkgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgYXJlYSA9IE1hdGguUEkgKiByICogcjsKCiAgICAgICAgICAgICAgICAvLyBTdGVwcwogICAgICAgICAgICAgICAgYWRkU3RlcCgiMS4gU2V0dXAgSW50ZWdyYWwiLCBgJCQgQSA9IFxcaW50X3stJHtyfX1eeyR7cn19IDJcXHNxcnR7JHtyfV4yIC0geF4yfSBcXCwgZHggJCRgLCAiV2UgaW50ZWdyYXRlIHZlcnRpY2FsIHN0cmlwcyBvZiBoZWlnaHQgMnkgZnJvbSAtciB0byByLiIpOwogICAgICAgICAgICAgICAgYWRkU3RlcCgiMi4gVHJpZyBTdWJzdGl0dXRpb24iLCBgTGV0ICQkIHggPSAke3J9XFxzaW4oXFx0aGV0YSkgJCQsICQkIGR4ID0gJHtyfVxcY29zKFxcdGhldGEpZFxcdGhldGEgJCRgLCAiU3RhbmRhcmQgc3Vic3RpdHV0aW9uIGZvciBjaXJjdWxhciBpbnRlZ3JhbHMuIik7CiAgICAgICAgICAgICAgICBhZGRTdGVwKCIzLiBFdmFsdWF0ZSIsIGAkJCBBID0gXFxwaSAoJHtyfSleMiA9ICR7YXJlYS50b0ZpeGVkKDQpfSAkJGAsICJUaGUgcmVzdWx0IG1hdGNoZXMgdGhlIHN0YW5kYXJkIGFyZWEgZm9ybXVsYS4iKTsKCiAgICAgICAgICAgICAgICAvLyBEcmF3IERhdGEKICAgICAgICAgICAgICAgIHNoYXBlRGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY2lyY2xlJywKICAgICAgICAgICAgICAgICAgICByOiByLAogICAgICAgICAgICAgICAgICAgIGY6IHggPT4gTWF0aC5zcXJ0KHIgKiByIC0geCAqIHgpLCAvLyBUb3AgaGFsZgogICAgICAgICAgICAgICAgICAgIHhNaW46IC1yLCB4TWF4OiByLAogICAgICAgICAgICAgICAgICAgIHlNYXg6IHIKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICB9IGVsc2UgaWYgKGN1ck1vZGUgPT09ICd0cmlhbmdsZScpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0X2InKS52YWx1ZSk7CiAgICAgICAgICAgICAgICBjb25zdCBoID0gcGFyc2VGbG9hdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndF9oJykudmFsdWUpOwogICAgICAgICAgICAgICAgaWYgKGlzTmFOKGIpIHx8IGlzTmFOKGgpIHx8IGIgPD0gMCB8fCBoIDw9IDApIHJldHVybjsKCiAgICAgICAgICAgICAgICBjb25zdCBhcmVhID0gMC41ICogYiAqIGg7CiAgICAgICAgICAgICAgICAvLyBTbG9wZSBtID0gLWgvYi4gbGluZSBlcTogeSA9IC1oL2IgKiB4ICsgaCAoYXNzdW1pbmcgcGVhayBhdCAwLGggYW5kIGJhc2UgMCB0byBiPyBObyB0eXBpY2FsIGlzIHBlYWsgYXQgMCxoIGZyb20gLWIvMiB0byBiLzIgb3IgMCwwIHRvIGIsMCB3aXRoIHBlYWsgYXQgeD8pCiAgICAgICAgICAgICAgICAvLyBTaW1wbGVzdCB2aXN1YWw6IFJpZ2h0IFRyaWFuZ2xlLiBPciBJc29zY2VsZXMuIAogICAgICAgICAgICAgICAgLy8gTGV0J3MgZG8gUmlnaHQgVHJpYW5nbGUgZm9yIHNpbXBsZSBpbnRlZ3JhdGlvbjogeSA9ICgtaC9iKXggKyBoLCBmcm9tIDAgdG8gYi4KICAgICAgICAgICAgICAgIGNvbnN0IGVxID0gYCgtJHtofS8ke2J9KXggKyAke2h9YDsKCiAgICAgICAgICAgICAgICBhZGRTdGVwKCIxLiBGaW5kIExpbmUgRXF1YXRpb24iLCBgJCQgeSh4KSA9IC1cXGZyYWN7JHtofX17JHtifX14ICsgJHtofSAkJGAsICJFcXVhdGlvbiBvZiB0aGUgaHlwb3RlbnVzZSBsaW5lLiIpOwogICAgICAgICAgICAgICAgYWRkU3RlcCgiMi4gU2V0dXAgSW50ZWdyYWwiLCBgJCQgQSA9IFxcaW50X3swfV57JHtifX0gXFxsZWZ0KCAtXFxmcmFjeyR7aH19eyR7Yn19eCArICR7aH0gXFxyaWdodCkgZHggJCRgLCAiQXJlYSB1bmRlciB0aGUgbGluZSBmcm9tIDAgdG8gYi4iKTsKICAgICAgICAgICAgICAgIGFkZFN0ZXAoIjMuIEFudGlkZXJpdmF0aXZlIiwgYCQkIFxcbGVmdFsgLVxcZnJhY3ske2h9fXsyXFxjZG90JHtifX14XjIgKyAke2h9eCBcXHJpZ2h0XV8wXnske2J9fSAkJGAsICJQb3dlciBydWxlIGludGVncmF0aW9uLiIpOwogICAgICAgICAgICAgICAgYWRkU3RlcCgiNC4gU29sdmUiLCBgJCQgLVxcZnJhY3ske2h9IFxcY2RvdCAke2J9XjJ9ezIke2J9fSArICR7aH0ke2J9ID0gLTAuNSR7Yn0ke2h9ICsgJHtifSR7aH0gPSAwLjUoJHtifSkoJHtofSkgPSAke2FyZWF9ICQkYCwgIlJlc3VsdCBtYXRjaGVzIEJhc2UgKiBIZWlnaHQgLyAyLiIpOwoKICAgICAgICAgICAgICAgIHNoYXBlRGF0YSA9IHsKICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZnVuY3Rpb24nLAogICAgICAgICAgICAgICAgICAgIGY6IHggPT4gKC1oIC8gYikgKiB4ICsgaCwKICAgICAgICAgICAgICAgICAgICB4TWluOiAwLCB4TWF4OiBiLAogICAgICAgICAgICAgICAgICAgIHlNYXg6IGgKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc3QgZnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VzdF9meCcpLnZhbHVlOwogICAgICAgICAgICAgICAgY29uc3QgeGEgPSBwYXJzZUZsb2F0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXN0X2EnKS52YWx1ZSk7CiAgICAgICAgICAgICAgICBjb25zdCB4YiA9IHBhcnNlRmxvYXQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RfYicpLnZhbHVlKTsKICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBNYXRoRW5naW5lLmMoZnMpOwoKICAgICAgICAgICAgICAgIGlmICghZikgcmV0dXJuOwoKICAgICAgICAgICAgICAgIC8vIE51bWVyaWNhbCBJbnQKICAgICAgICAgICAgICAgIGNvbnN0IG4gPSAxMDA7CiAgICAgICAgICAgICAgICBjb25zdCBkeCA9ICh4YiAtIHhhKSAvIG47CiAgICAgICAgICAgICAgICBsZXQgc3VtID0gMDsKICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSBzdW0gKz0gZih4YSArIGkgKiBkeCArIGR4IC8gMikgKiBkeDsKCiAgICAgICAgICAgICAgICBhZGRTdGVwKCIxLiBTZXR1cCIsIGAkJCBcXGludF97JHt4YX19Xnske3hifX0gJHtmc30gXFwsIGR4ICQkYCwgIlN0YW5kYXJkIGRlZmluaXRlIGludGVncmFsLiIpOwogICAgICAgICAgICAgICAgYWRkU3RlcCgiMi4gQXBwcm94aW1hdGUiLCBgJCQgQSBcXGFwcHJveCAke3N1bS50b0ZpeGVkKDUpfSAkJGAsICJVc2luZyBudW1lcmljYWwgaW50ZWdyYXRpb24gKFJpZW1hbm4gU3VtKS4iKTsKCiAgICAgICAgICAgICAgICBzaGFwZURhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Z1bmN0aW9uJywKICAgICAgICAgICAgICAgICAgICBmOiBmLAogICAgICAgICAgICAgICAgICAgIHhNaW46IHhhLCB4TWF4OiB4YiwKICAgICAgICAgICAgICAgICAgICB5TWF4OiBNYXRoLm1heChmKHhhKSwgZih4YiksIGYoKHhhICsgeGIpIC8gMikpIC8vIEFwcHJveCBtYXggZm9yIHNjYWxlCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBkcmF3KHNoYXBlRGF0YSk7CiAgICAgICAgICAgIC8vIFR5cGVzZXQgTWF0aEpheCBpZiBhdmFpbGFibGUgKE1vY2sgZm9yIG5vdyBvciBzaW1wbGUgcmVwbGFjZW1lbnQpCiAgICAgICAgICAgIC8vIFNpbmNlIHdlIGNhbid0IGxvYWQgTWF0aEpheCBlYXNpbHkgaW4gb2ZmbGluZS9pZnJhbWUsIHdlIHJlbHkgb24gVVRGOCBwc2V1ZG8tbWF0aCBvciBIVE1MLgogICAgICAgICAgICAvLyBJIHVzZWQgJCQgc3ludGF4IGFib3ZlLCBidXQgd2l0aG91dCB0aGUgbGlicmFyeSBpdCBzaG93cyByYXcuIEkgd2lsbCBzdHJpcCAkJCBhbmQgYmFzaWNzLgogICAgICAgICAgICByZW5kZXJNYXRoKCk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBhZGRTdGVwKHRpdGxlLCBtYXRoLCBkZXNjKSB7CiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXdlaWdodDo3MDA7IGNvbG9yOiM1YzZiYzA7IG1hcmdpbi1ib3R0b206NXB4OyI+JHt0aXRsZX08L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1saW5lIj4ke21hdGh9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtZXhwbCI+JHtkZXNjfTwvZGl2PgogICAgICAgIGA7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdGVwc19vdXQnKS5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVuZGVyTWF0aCgpIHsKICAgICAgICAgICAgLy8gU2ltcGxlIGZvcm1hdHRlciBmb3IgZ2VuZXJpYyBkaXNwbGF5IHdpdGhvdXQgaGVhdnkgbGlicwogICAgICAgICAgICBjb25zdCBlbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1saW5lJyk7CiAgICAgICAgICAgIGVscy5mb3JFYWNoKGVsID0+IHsKICAgICAgICAgICAgICAgIGxldCBoID0gZWwuaW5uZXJIVE1MOwogICAgICAgICAgICAgICAgaCA9IGgucmVwbGFjZSgvXCRcJC9nLCAnJyk7CiAgICAgICAgICAgICAgICBoID0gaC5yZXBsYWNlKC9cXGludF9ceyhbXn1dKylcfVxeXHsoW159XSspXH0vZywgJ+KIqzxzdWI+JDE8L3N1Yj48c3VwPiQyPC9zdXA+Jyk7CiAgICAgICAgICAgICAgICBoID0gaC5yZXBsYWNlKC9cXHNxcnRceyhbXn1dKylcfS9nLCAn4oiaKCQxKScpOwogICAgICAgICAgICAgICAgaCA9IGgucmVwbGFjZSgvXFxmcmFjXHsoW159XSspXH1ceyhbXn1dKylcfS9nLCAnKCQxLyQyKScpOwogICAgICAgICAgICAgICAgaCA9IGgucmVwbGFjZSgvXFxwaS9nLCAnz4AnKTsKICAgICAgICAgICAgICAgIGggPSBoLnJlcGxhY2UoL1xcY2RvdC9nLCAnwrcnKTsKICAgICAgICAgICAgICAgIGggPSBoLnJlcGxhY2UoL1xcbGVmdC9nLCAnJyk7CiAgICAgICAgICAgICAgICBoID0gaC5yZXBsYWNlKC9cXHJpZ2h0L2csICcnKTsKICAgICAgICAgICAgICAgIGggPSBoLnJlcGxhY2UoL1xcLC9nLCAnICcpOwogICAgICAgICAgICAgICAgZWwuaW5uZXJIVE1MID0gaDsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBkcmF3KGRhdGEpIHsKICAgICAgICAgICAgY29uc3QgY3ZzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhcycpOwogICAgICAgICAgICBjb25zdCBjdHggPSBjdnMuZ2V0Q29udGV4dCgnMmQnKTsKICAgICAgICAgICAgY29uc3QgdyA9IGN2cy5wYXJlbnRFbGVtZW50LmNsaWVudFdpZHRoOwogICAgICAgICAgICBjb25zdCBoID0gY3ZzLnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgICBjdnMud2lkdGggPSB3OyBjdnMuaGVpZ2h0ID0gaDsKCiAgICAgICAgICAgIC8vIFNjYWxlCiAgICAgICAgICAgIGNvbnN0IG1hcmdpbiA9IDQwOwogICAgICAgICAgICBsZXQgeE1pbiA9IGRhdGEueE1pbiwgeE1heCA9IGRhdGEueE1heDsKICAgICAgICAgICAgbGV0IHlNYXggPSBkYXRhLnlNYXggfHwgMTA7CiAgICAgICAgICAgIGxldCB5TWluID0gMDsKICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2NpcmNsZScpIHlNaW4gPSAtZGF0YS5yOyAvLyBmdWxsIGNpcmNsZSB2aWV3CgogICAgICAgICAgICAvLyBBc3BlY3QgZml4PwogICAgICAgICAgICAvLyBMZXQncyBqdXN0IGZpdCB0byBib3gKICAgICAgICAgICAgY29uc3Qgc2NhbGVYID0gKHcgLSAyICogbWFyZ2luKSAvICh4TWF4IC0geE1pbik7CiAgICAgICAgICAgIGNvbnN0IHNjYWxlWSA9IChoIC0gMiAqIG1hcmdpbikgLyAoeU1heCAtIHlNaW4pOwogICAgICAgICAgICBjb25zdCBzY2FsZSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKTsgLy8gVW5pZm9ybSBzY2FsZSBmb3IgY2lyY2xlIGNvcnJlY3RuZXNzCgogICAgICAgICAgICBjb25zdCBjeCA9IHcgLyAyIC0gKHhNYXggKyB4TWluKSAvIDIgKiBzY2FsZTsKICAgICAgICAgICAgY29uc3QgY3kgPSBoIC8gMiArICh5TWF4ICsgeU1pbikgLyAyICogc2NhbGU7IC8vIEludmVydCB5IGxhdGVyCgogICAgICAgICAgICBjb25zdCB0b0N4ID0geCA9PiBjeCArIHggKiBzY2FsZTsKICAgICAgICAgICAgY29uc3QgdG9DeSA9IHkgPT4gY3kgLSB5ICogc2NhbGU7CgogICAgICAgICAgICAvLyBBeGVzCiAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjZGRkJzsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHgubW92ZVRvKDAsIGN5KTsgY3R4LmxpbmVUbyh3LCBjeSk7IC8vIFggYXhpcwogICAgICAgICAgICBjdHgubW92ZVRvKGN4LCAwKTsgY3R4LmxpbmVUbyhjeCwgaCk7IC8vIFkgYXhpcwogICAgICAgICAgICBjdHguc3Ryb2tlKCk7CgogICAgICAgICAgICAvLyBBbmltYXRlIFNsaWNlcwogICAgICAgICAgICBjb25zdCBzbGljZXMgPSA0MDsKICAgICAgICAgICAgbGV0IGkgPSAwOwoKICAgICAgICAgICAgZnVuY3Rpb24gZHJhd0ZyYW1lKCkgewogICAgICAgICAgICAgICAgaWYgKGkgPiBzbGljZXMpIHJldHVybjsKCiAgICAgICAgICAgICAgICAvLyBDbGVhciB1c3VhbGx5PyBObywgd2UgYnVpbGQgdXAuCiAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSwgY2xlYXIgdG8gcmVkcmF3IGJnCiAgICAgICAgICAgICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHcsIGgpOwoKICAgICAgICAgICAgICAgIC8vIEF4ZXMgYWdhaW4KICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjZGRkJzsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oMCwgY3kpOyBjdHgubGluZVRvKHcsIGN5KTsKICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oY3gsIDApOyBjdHgubGluZVRvKGN4LCBoKTsKICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKCiAgICAgICAgICAgICAgICAvLyBEcmF3IGZ1bGwgb3V0bGluZSBmdW5jdGlvbiBmaXJzdCAobGlnaHQpCiAgICAgICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnI2UwZTBlMCc7CiAgICAgICAgICAgICAgICBjdHgubGluZVdpZHRoID0gMTsKICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjaXJjbGUnKSB7CiAgICAgICAgICAgICAgICAgICAgY3R4LmFyYyhjeCwgY3ksIGRhdGEuciAqIHNjYWxlLCAwLCAyICogTWF0aC5QSSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIFBsb3QgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICBjdHgubW92ZVRvKHRvQ3goZGF0YS54TWluKSwgdG9DeShkYXRhLmYoZGF0YS54TWluKSkpOwogICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDw9IDEwMDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSBkYXRhLnhNaW4gKyAoZGF0YS54TWF4IC0gZGF0YS54TWluKSAqIChqIC8gMTAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh0b0N4KHgpLCB0b0N5KGRhdGEuZih4KSkpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50eXBlICE9PSAnY2lyY2xlJykgewogICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHRvQ3goZGF0YS54TWF4KSwgY3kpOwogICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZVRvKHRvQ3goZGF0YS54TWluKSwgY3kpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTsKCiAgICAgICAgICAgICAgICAvLyBEcmF3IFJlY3RhbmdsZXMgdXAgdG8gaQogICAgICAgICAgICAgICAgY29uc3QgZHggPSAoZGF0YS54TWF4IC0gZGF0YS54TWluKSAvIHNsaWNlczsKICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSg5MiwgMTA3LCAxOTIsIDAuNSknOwogICAgICAgICAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gJyMzOTQ5YWInOwogICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7CgogICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB4TGVmdCA9IGRhdGEueE1pbiArIGogKiBkeDsKICAgICAgICAgICAgICAgICAgICBjb25zdCB4UmlnaHQgPSB4TGVmdCArIGR4OyAvLyBXaWR0aAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodFZhbCA9IGRhdGEuZih4TGVmdCArIGR4IC8gMik7IC8vIE1pZHBvaW50CgogICAgICAgICAgICAgICAgICAgIGNvbnN0IHB4ID0gdG9DeCh4TGVmdCk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgcFdpZHRoID0gdG9DeCh4UmlnaHQpIC0gcHg7CgogICAgICAgICAgICAgICAgICAgIC8vIElmIGNpcmNsZSwgd2UgZG8gMnkgaGVpZ2h0IChjZW50ZXJlZCBhdCB5PTApID8KICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9ybXVsYSB3YXMgMipzcXJ0Li4uIHdoaWNoIGlzIHRvdGFsIGhlaWdodC4KICAgICAgICAgICAgICAgICAgICAvLyBPciB3ZSBkcmF3IGZyb20gYXhpcyB1cCBhbmQgbWlycm9yLgoKICAgICAgICAgICAgICAgICAgICBsZXQgcHksIHBIZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ2NpcmNsZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZih4KSBnaXZlcyBoYWxmIGhlaWdodC4gd2Ugd2FudCBmdWxsIHN0cmlwPwogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9ybXVsYSBBcmVhID0gSW50ZWdyYWwgMip5LiAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU28gdmlzdWFsbHkgd2UgZHJhdyBhIHN0cmlwIGZyb20gLXkgdG8gK3kuCiAgICAgICAgICAgICAgICAgICAgICAgIHBIZWlnaHQgPSBoZWlnaHRWYWwgKiBzY2FsZSAqIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIHB5ID0gdG9DeShoZWlnaHRWYWwpOyAvLyBUb3AgeQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBIZWlnaHQgPSBoZWlnaHRWYWwgKiBzY2FsZTsKICAgICAgICAgICAgICAgICAgICAgICAgcHkgPSB0b0N5KGhlaWdodFZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY2lyY2xlJykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBEcmF3IGNlbnRlcmVkIHJlY3QKICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KHB4LCBweSwgcFdpZHRoIC0gMSwgcEhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VSZWN0KHB4LCBweSwgcFdpZHRoIC0gMSwgcEhlaWdodCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRHJhdyBmcm9tIGF4aXMgdXAKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FudmFzIHkgaXMgZGVyaXZlZC4gdG9DeShoZWlnaHRWYWwpIGlzIFRvcC4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG9DeSgwKSBpcyBib3R0b20uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlaWdodCBpbiBwaXhlbHMgaXMgdG9DeSgwKSAtIHRvQ3koaGVpZ2h0KQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXhlbEggPSB0b0N5KDApIC0gdG9DeShoZWlnaHRWYWwpOwogICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJlY3QocHgsIHRvQ3koaGVpZ2h0VmFsKSwgcFdpZHRoIC0gMSwgcGl4ZWxIKTsKICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZVJlY3QocHgsIHRvQ3koaGVpZ2h0VmFsKSwgcFdpZHRoIC0gMSwgcGl4ZWxIKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRyYXdGcmFtZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRyYXdGcmFtZSgpOwogICAgICAgIH0KCiAgICAgICAgLy8gSW5pdCB3aXRoIGNpcmNsZQogICAgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHNldFRpbWVvdXQoY2FsY3VsYXRlLCAxMDApOwogICAgICAgIH07CgogICAgPC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4=”; var htmlContent = “”; try { htmlContent = atob(b64); } catch (e) { console.error(“Base64 decode failed”, e); wrapper.innerHTML = ” Error loading calculator. “; return; } // Create Iframe var iframe = document.createElement(‘iframe’); iframe.style.width = “100%”; iframe.style.border = “none”; iframe.style.overflow = “hidden”; iframe.scrolling = “no”; iframe.style.minHeight = “400px”;…

  • Lateral Surface Area Calculator – Quick & Accurate Side Area for 3D Shapes

    Lateral Surface Area Calculator Lateral Surface Area Calculator Calculate Lateral (Sides) vs. Total Surface Area Select Shape: CylinderConeRectangular Prism (Box)CubeTriangular PrismSquare PyramidSphere cm m in ft Formula Used: LSA = … Lateral Area (Sides) Base Area Schematic Diagram (Not to Scale) When working with 3D shapes, we often need to know how much area the…