ETH Price: $3,313.54 (-3.42%)

Contract

0x2747096fF9E0FCe877cD168DcD5dE16040A4AB85
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SqrtChallenge

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : SqrtChallenge.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import {IChallenge} from "../IChallenge.sol";

import {Fixed18} from "./Fixed18.sol";

uint256 constant INPUT_SIZE = 5;

// Expecting 5 decimal places of precision.
Fixed18 constant EPSILON = Fixed18.wrap(0.0001 * 10 ** 18);

interface ISqrt {
    function sqrt(Fixed18[INPUT_SIZE] calldata) external view returns (Fixed18[INPUT_SIZE] memory);
}

function random_fixed18(uint256 seed) pure returns (Fixed18) {
    return Fixed18.wrap(uint256(random_uint64(seed)));
}

function random_uint64(uint256 seed) pure returns (uint64) {
    return uint64(uint256(keccak256(abi.encodePacked(seed))));
}

contract SqrtChallenge is IChallenge {
    error DoesNotSatisfyTolerance(uint256 input, uint256 output);

    function run(address target, uint256 seed) external view override returns (uint32) {
        // Generate inputs.
        Fixed18[INPUT_SIZE] memory inputs;
        unchecked {
            for (uint256 i = 0; i < INPUT_SIZE; ++i) {
                inputs[i] = random_fixed18(seed);
                seed = Fixed18.unwrap(inputs[i]);
            }
        }

        uint256 preGas = gasleft();
        Fixed18[INPUT_SIZE] memory outputs = ISqrt(target).sqrt(inputs);
        uint256 usedGas;
        unchecked {
            usedGas = preGas - gasleft();
        }

        verify(inputs, outputs);

        return uint32(usedGas);
    }

    // Reverts if invalid
    function verify(Fixed18[INPUT_SIZE] memory inputs, Fixed18[INPUT_SIZE] memory outputs) internal pure {
        unchecked {
            for (uint256 i = 0; i < INPUT_SIZE; ++i) {
                verify(inputs[i], outputs[i]);
            }
        }
    }

    // Reverts if invalid
    function verify(Fixed18 input, Fixed18 output) internal pure {
        // Checks
        //       | output * output - input |
        //       --------------------------  < EPSILON
        //       |        output           |
        if (!output.mul(output).distance(input).div(output).lt(EPSILON)) {
            revert DoesNotSatisfyTolerance(Fixed18.unwrap(input), Fixed18.unwrap(output));
        }
    }

    function name() external pure override returns (string memory) {
        return "SQRT";
    }

    function description() external pure override returns (string memory) {
        return "Calculating the square root of an array of Fixed18 numbers";
    }

    function svg(uint256 tokenId) external pure returns (string memory art) {
        uint32 level = uint32(tokenId);
        if (level == 0) {
            return '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" />';
        }
        if (level == 1) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 2) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 3) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 4) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 5) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 6) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 7) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 8) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 41,82 52,56" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 9) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 41,82 52,56" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 52,56 72,35" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 10) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 41,82 52,56" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 52,56 72,35" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 72,35 97,21" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 11) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 41,82 52,56" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 52,56 72,35" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 72,35 97,21" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 97,21 126,16" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
        if (level == 12) {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 41,82 52,56" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 52,56 72,35" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 72,35 97,21" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 97,21 126,16" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 126,16 154,19" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        } else {
            return
            '<rect width="230" height="230" rx="18px" ry="18px" fill="rgba(0,0,0,0.1)" /><polygon points="115,115 144,115 144,144" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 144,144 123,164" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 123,164 95,169" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 95,169 68,159" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 68,159 48,138" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 48,138 39,111" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 39,111 41,82" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 41,82 52,56" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 52,56 72,35" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 72,35 97,21" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 97,21 126,16" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 126,16 154,19" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon><polygon points="115,115 154,19 181,30" fill="none" stroke="white" stroke-linejoin="round" stroke-width="2"><animateTransform attributeName="transform" attributeType="XML" type="rotate" from="0 115 115" to="360 115 115" dur="10s" repeatCount="indefinite"/></polygon>';
        }
    }
}

File 2 of 3 : IChallenge.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IChallenge {
    /// Execute a given solution, using the seed to generate inputs. The actual
    /// implementation is specific to the challenge.
    /// @return The amount of gas consumed by the solution.
    function run(address target, uint256 seed) external view returns (uint32);

    /// @return An SVG snippet, which is embedded in the main NFT.
    function svg(uint256 tokenId) external view returns (string memory);

    /// @return The name of the challenge.
    function name() external view returns (string memory);

    /// @return The description of the challenge.
    /// @notice Should not have line breaks.
    function description() external view returns (string memory);
}

File 3 of 3 : Fixed18.sol
// SPADIX-License-Identifier: MIT
pragma solidity ^0.8.17;

type Fixed18 is uint256;

uint256 constant FIXED18BASE = 10 ** 18;

function add(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    return Fixed18.wrap(Fixed18.unwrap(a) + Fixed18.unwrap(b));
}

function sub(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    return Fixed18.wrap(Fixed18.unwrap(a) - Fixed18.unwrap(b));
}

function mul(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    return Fixed18.wrap((Fixed18.unwrap(a) * Fixed18.unwrap(b)) / FIXED18BASE);
}

function div(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    return Fixed18.wrap((Fixed18.unwrap(a) * FIXED18BASE) / Fixed18.unwrap(b));
}

function distance(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    uint256 _a = Fixed18.unwrap(a);
    uint256 _b = Fixed18.unwrap(b);
    unchecked {
        if (_a < _b) {
            return Fixed18.wrap(_b - _a);
        } else {
            return Fixed18.wrap(_a - _b);
        }
    }
}

function lt(Fixed18 a, Fixed18 b) pure returns (bool) {
    return Fixed18.unwrap(a) < Fixed18.unwrap(b);
}

function le(Fixed18 a, Fixed18 b) pure returns (bool) {
    return Fixed18.unwrap(a) <= Fixed18.unwrap(b);
}

function gt(Fixed18 a, Fixed18 b) pure returns (bool) {
    return Fixed18.unwrap(a) > Fixed18.unwrap(b);
}

function bit_and(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    return Fixed18.wrap(Fixed18.unwrap(a) & Fixed18.unwrap(b));
}

function bit_xor(Fixed18 a, Fixed18 b) pure returns (Fixed18) {
    return Fixed18.wrap(Fixed18.unwrap(a) ^ Fixed18.unwrap(b));
}

using {add, sub, mul, div, distance, lt, le, gt, bit_and, bit_xor} for Fixed18 global;

Settings
{
  "remappings": [
    "ds-test/=lib/solmate/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "puretea/=lib/puretea/src/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200,
    "details": {
      "constantOptimizer": true,
      "yul": true
    }
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"input","type":"uint256"},{"internalType":"uint256","name":"output","type":"uint256"}],"name":"DoesNotSatisfyTolerance","type":"error"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"run","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"svg","outputs":[{"internalType":"string","name":"art","type":"string"}],"stateMutability":"pure","type":"function"}]

60808060405234610016576156e4908161001c8239f35b600080fdfe60806040908082526004918236101561001757600080fd5b600091823560e01c90816306fdde031461037657508063381fd1901461012657806344b285db146100f757637284e4161461005157600080fd5b346100f357816003193601126100f35780519160608301908382106001600160401b038311176100e057506100dc93508152603a82527f43616c63756c6174696e67207468652073717561726520726f6f74206f66206160208301527f6e206172726179206f662046697865643138206e756d626572730000000000008183015251918291826103b5565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b50903461012357602036600319011261012357506101186100dc9235610483565b9051918291826103b5565b80fd5b5091903461012357826003193601126101235781356001600160a01b03811692908390036100f3578351916024803561015e8561042f565b60a0908136873783905b600582106103345750505a908088518098632561f36960e11b82528782018988915b60058310610317575050508160a4915afa96871561030d578497610273575b50505a900394825b600581106101c95760208763ffffffff8a5191168152f35b6101d3818761044a565b516101de828461044a565b5190818002821583820484148117156102615761020683670de0b6b3a7640000809404610471565b8281029281840414901517156102615761024f5782655af3107a4000910410156102345750506001016101b1565b6044918588928c5193630b601a0760e01b8552840152820152fd5b634e487b7160e01b8752601288528587fd5b634e487b7160e01b8852601189528688fd5b91965090813d8111610305575b601f8301601f19168201926001600160401b038411838510176102f357838a5282019181818403126102ef5782601f820112156102ef576102c08461042f565b839181019283116102ef57905b8282106102df575050509438806101a9565b81518152602091820191016102cd565b8580fd5b634e487b7160e01b8652604187528486fd5b3d9250610280565b88513d86823e3d90fd5b815181528695508c9450600192909201916020918201910161018a565b6001600160401b0390895160208082019283528152610352816103fe565b51902016610360828861044a565b52600161036d828861044a565b51910190610168565b92939050346103b157836003193601126103b1576100dc9350610398836103fe565b82526314d4549560e21b602083015251918291826103b5565b8380fd5b6020808252825181830181905290939260005b8281106103ea57505060409293506000838284010152601f8019910116010190565b8181018601518482016040015285016103c8565b604081019081106001600160401b0382111761041957604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761041957604052565b90600581101561045b5760051b0190565b634e487b7160e01b600052603260045260246000fd5b908082101561047e570390565b900390565b63ffffffff168015614bad5760018114614a9557600281146148d9576003811461466a576004908181146143425760058114613f775760068114613afa57600781146135cc5760088114612fef576009811461296c57600a811461223957600b81146119bf57600c03610ec15760405190610d008201908282106001600160401b03831117610eac5750604052610cc1815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201527f65222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231610ac08201527f31352c3131352039372c3231203132362c3136222066696c6c3d226e6f6e6522610ae08201527f207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d610b008201527f22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174610b208201527f655472616e73666f726d206174747269627574654e616d653d227472616e7366610b408201527f6f726d2220617474726962757465547970653d22584d4c2220747970653d2272610b608201527f6f74617465222066726f6d3d223020313135203131352220746f3d2233363020610b808201527f3131352031313522206475723d223130732220726570656174436f756e743d22610ba08201527f696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20610bc08201527f706f696e74733d223131352c313135203132362c3136203135342c3139222066610be08201527f696c6c3d226e6f6e6522207374726f6b653d22776869746522207374726f6b65610c008201527f2d6c696e656a6f696e3d22726f756e6422207374726f6b652d77696474683d22610c208201527f32223e3c616e696d6174655472616e73666f726d206174747269627574654e61610c408201527f6d653d227472616e73666f726d2220617474726962757465547970653d22584d610c608201527f4c2220747970653d22726f74617465222066726f6d3d22302031313520313135610c808201527f2220746f3d22333630203131352031313522206475723d223130732220726570610ca08201527f656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e610cc0820152601f60f91b610ce082015290565b604190634e487b7160e01b6000525260246000fd5b60405190610e008201908282106001600160401b03831117610eac5750604052610dcb815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201527f65222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231610ac08201527f31352c3131352039372c3231203132362c3136222066696c6c3d226e6f6e6522610ae08201527f207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d610b008201527f22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174610b208201527f655472616e73666f726d206174747269627574654e616d653d227472616e7366610b408201527f6f726d2220617474726962757465547970653d22584d4c2220747970653d2272610b608201527f6f74617465222066726f6d3d223020313135203131352220746f3d2233363020610b808201527f3131352031313522206475723d223130732220726570656174436f756e743d22610ba08201527f696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20610bc08201527f706f696e74733d223131352c313135203132362c3136203135342c3139222066610be08201527f696c6c3d226e6f6e6522207374726f6b653d22776869746522207374726f6b65610c008201527f2d6c696e656a6f696e3d22726f756e6422207374726f6b652d77696474683d22610c208201527f32223e3c616e696d6174655472616e73666f726d206174747269627574654e61610c408201527f6d653d227472616e73666f726d2220617474726962757465547970653d22584d610c608201527f4c2220747970653d22726f74617465222066726f6d3d22302031313520313135610c808201527f2220746f3d22333630203131352031313522206475723d223130732220726570610ca08201527f656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e610cc08201527f3e3c706f6c79676f6e20706f696e74733d223131352c313135203135342c3139610ce08201527f203138312c3330222066696c6c3d226e6f6e6522207374726f6b653d22776869610d008201527f746522207374726f6b652d6c696e656a6f696e3d22726f756e6422207374726f610d208201527f6b652d77696474683d2232223e3c616e696d6174655472616e73666f726d2061610d408201527f74747269627574654e616d653d227472616e73666f726d222061747472696275610d608201527f7465547970653d22584d4c2220747970653d22726f74617465222066726f6d3d610d808201527f223020313135203131352220746f3d2233363020313135203131352220647572610da08201527f3d223130732220726570656174436f756e743d22696e646566696e697465222f610dc08201526a1f1e17b837b63cb3b7b71f60a91b610de082015290565b5060405190610be08201908282106001600160401b03831117610eac5750604052610bb7815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201527f65222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231610ac08201527f31352c3131352039372c3231203132362c3136222066696c6c3d226e6f6e6522610ae08201527f207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d610b008201527f22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174610b208201527f655472616e73666f726d206174747269627574654e616d653d227472616e7366610b408201527f6f726d2220617474726962757465547970653d22584d4c2220747970653d2272610b608201527f6f74617465222066726f6d3d223020313135203131352220746f3d2233363020610b808201527f3131352031313522206475723d223130732220726570656174436f756e743d22610ba08201527f696e646566696e697465222f3e3c2f706f6c79676f6e3e000000000000000000610bc082015290565b5060405190610ae08201908282106001600160401b03831117610eac5750604052610aae815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201526d3291179f1e17b837b63cb3b7b71f60911b610ac082015290565b50604051906109e08201908282106001600160401b03831117610eac57506040526109a6815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015265363cb3b7b71f60d11b6109c082015290565b50604051906108c08201908282106001600160401b03831117610eac575060405261089e815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201527f436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e3e00006108a082015290565b50604051906107c08201908282106001600160401b03831117610eac5750604052610796815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f83398151915261078082015275373232b334b734ba3291179f1e17b837b63cb3b7b71f60511b6107a082015290565b50604051906106c08201908282106001600160401b03831117610eac575060405261068d815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526c11179f1e17b837b63cb3b7b71f60991b6106a082015290565b50604051906105c08201908282106001600160401b03831117610eac5750604052610583815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f8339815191526105808201526237b71f60e91b6105a082015290565b50604051906104a08201908282106001600160401b03831117610eac5750604052610479815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201527f3d22696e646566696e697465222f3e3c2f706f6c79676f6e3e0000000000000061048082015290565b506040516103a081018181106001600160401b038211176104195760405261036f815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef8339815191526103608201526e3a3291179f1e17b837b63cb3b7b71f60891b61038082015290565b506040516102a081018181106001600160401b0382111761041957604052610264815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af8339815191526102608201526333b7b71f60e11b61028082015290565b5060405161018081018181106001600160401b0382111761041957604052610158815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f8339815191526101408201527f22696e646566696e697465222f3e3c2f706f6c79676f6e3e000000000000000061016082015290565b50604051608081018181106001600160401b0382111761041957604052604c815260008051602061508f833981519152602082015260008051602061562f83398151915260408201526b18161816181718949110179f60a11b60608201529056fe6e656a6f696e3d22726f756e6422207374726f6b652d77696474683d2232223e6f6c79676f6e20706f696e74733d223131352c3131352035322c35362037322c6d3d223020313135203131352220746f3d2233363020313135203131352220647374726f6b652d77696474683d2232223e3c616e696d6174655472616e73666f22207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e6e3d22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d222066696c6c3d226e6f6e6522207374726f6b653d2277686974652220737472206475723d223130732220726570656174436f756e743d22696e646566696e69726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174656b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d7769647468726f6b652d77696474683d2232223e3c616e696d6174655472616e73666f726d4e616d653d227472616e73666f726d2220617474726962757465547970653d2274655472616e73666f726d206174747269627574654e616d653d227472616e7320706f696e74733d223131352c313135203134342c313434203132332c3136347374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d2222584d4c2220747970653d22726f74617465222066726f6d3d22302031313520776869746522207374726f6b652d6c696e656a6f696e3d22726f756e64222073206174747269627574654e616d653d227472616e73666f726d222061747472696962757465547970653d22584d4c2220747970653d22726f74617465222066726570656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79677465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2233382033392c313131222066696c6c3d226e6f6e6522207374726f6b653d22776f6b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d77696474584d4c2220747970653d22726f74617465222066726f6d3d223020313135203131352220746f3d22333630203131352031313522206475723d22313073222072654e616d653d227472616e73666f726d2220617474726962757465547970653d6e20706f696e74733d223131352c3131352036382c3135392034382c313338225472616e73666f726d206174747269627574654e616d653d227472616e73666f6d206174747269627574654e616d653d227472616e73666f726d222061747472302c302c302e312922202f3e3c706f6c79676f6e20706f696e74733d223131356e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20703d226e6f6e6522207374726f6b653d22776869746522207374726f6b652d6c6931352031313522206475723d223130732220726570656174436f756e743d22696475723d223130732220726570656174436f756e743d22696e646566696e69746869746522207374726f6b652d6c696e656a6f696e3d22726f756e64222073743335222066696c6c3d226e6f6e6522207374726f6b653d2277686974652220733c726563742077696474683d2232333022206865696768743d223233302220723d22696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f2220726570656174436f756e743d22696e646566696e697465222f3e3c2f706f6f3d22333630203131352031313522206475723d22313073222072657065617422776869746522207374726f6b652d6c696e656a6f696e3d22726f756e64222035203131352220746f3d22333630203131352031313522206475723d22313073726f6d3d223020313135203131352220746f3d22333630203131352031313522726d2220617474726962757465547970653d22584d4c2220747970653d22726f74617465222066726f6d3d223020313135203131352220746f3d2233363020316174655472616e73666f726d206174747269627574654e616d653d227472616e6522207374726f6b653d22776869746522207374726f6b652d6c696e656a6f693d2232223e3c616e696d6174655472616e73666f726d206174747269627574656c79676f6e3e3c706f6c79676f6e20706f696e74733d223131352c3131352037683d2232223e3c616e696d6174655472616e73666f726d20617474726962757473666f726d2220617474726962757465547970653d22584d4c2220747970653d2c313135203134342c313135203134342c313434222066696c6c3d226e6f6e6522696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e22726f74617465222066726f6d3d223020313135203131352220746f3d223336726962757465547970653d22584d4c2220747970653d22726f7461746522206674726f6b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d776930203131352031313522206475723d223130732220726570656174436f756e74726d206174747269627574654e616d653d227472616e73666f726d222061747475723d223130732220726570656174436f756e743d22696e646566696e6974653c616e696d6174655472616e73666f726d206174747269627574654e616d653d2c3136342039352c313639222066696c6c3d226e6f6e6522207374726f6b653d726570656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231313d22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d616f6e3e3c706f6c79676f6e20706f696e74733d223131352c3131352034382c313131352c3131352039352c3136392036382c313539222066696c6c3d226e6f6e322c33352039372c3231222066696c6c3d226e6f6e6522207374726f6b653d22203131352031313522206475723d223130732220726570656174436f756e743d6474683d2232223e3c616e696d6174655472616e73666f726d20617474726962352c3131352033392c3131312034312c3832222066696c6c3d226e6f6e65222074726f6b652d77696474683d2232223e3c616e696d6174655472616e73666f726f6d3d223020313135203131352220746f3d2233363020313135203131352220676f6e3e3c706f6c79676f6e20706f696e74733d223131352c313135203132333131352220746f3d22333630203131352031313522206475723d22313073222062757465547970653d22584d4c2220747970653d22726f74617465222066726f666f726d2220617474726962757465547970653d22584d4c2220747970653d22227472616e73666f726d2220617474726962757465547970653d22584d4c2220436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e3e3c70653d22584d4c2220747970653d22726f74617465222066726f6d3d2230203131747970653d22726f74617465222066726f6d3d223020313135203131352220742066696c6c3d226e6f6e6522207374726f6b653d22776869746522207374726f783d2231387078222072793d2231387078222066696c6c3d227267626128302c7574654e616d653d227472616e73666f726d2220617474726962757465547970726f74617465222066726f6d3d223020313135203131352220746f3d223336306f696e74733d223131352c3131352034312c38322035322c3536222066696c6ca2646970667358221220bf6e990151c78849f1262cf7913c3a738f7bf79d3b1c8760098e8800fecf7d2464736f6c63430008110033

Deployed Bytecode

0x60806040908082526004918236101561001757600080fd5b600091823560e01c90816306fdde031461037657508063381fd1901461012657806344b285db146100f757637284e4161461005157600080fd5b346100f357816003193601126100f35780519160608301908382106001600160401b038311176100e057506100dc93508152603a82527f43616c63756c6174696e67207468652073717561726520726f6f74206f66206160208301527f6e206172726179206f662046697865643138206e756d626572730000000000008183015251918291826103b5565b0390f35b634e487b7160e01b815260418552602490fd5b5080fd5b50903461012357602036600319011261012357506101186100dc9235610483565b9051918291826103b5565b80fd5b5091903461012357826003193601126101235781356001600160a01b03811692908390036100f3578351916024803561015e8561042f565b60a0908136873783905b600582106103345750505a908088518098632561f36960e11b82528782018988915b60058310610317575050508160a4915afa96871561030d578497610273575b50505a900394825b600581106101c95760208763ffffffff8a5191168152f35b6101d3818761044a565b516101de828461044a565b5190818002821583820484148117156102615761020683670de0b6b3a7640000809404610471565b8281029281840414901517156102615761024f5782655af3107a4000910410156102345750506001016101b1565b6044918588928c5193630b601a0760e01b8552840152820152fd5b634e487b7160e01b8752601288528587fd5b634e487b7160e01b8852601189528688fd5b91965090813d8111610305575b601f8301601f19168201926001600160401b038411838510176102f357838a5282019181818403126102ef5782601f820112156102ef576102c08461042f565b839181019283116102ef57905b8282106102df575050509438806101a9565b81518152602091820191016102cd565b8580fd5b634e487b7160e01b8652604187528486fd5b3d9250610280565b88513d86823e3d90fd5b815181528695508c9450600192909201916020918201910161018a565b6001600160401b0390895160208082019283528152610352816103fe565b51902016610360828861044a565b52600161036d828861044a565b51910190610168565b92939050346103b157836003193601126103b1576100dc9350610398836103fe565b82526314d4549560e21b602083015251918291826103b5565b8380fd5b6020808252825181830181905290939260005b8281106103ea57505060409293506000838284010152601f8019910116010190565b8181018601518482016040015285016103c8565b604081019081106001600160401b0382111761041957604052565b634e487b7160e01b600052604160045260246000fd5b60a081019081106001600160401b0382111761041957604052565b90600581101561045b5760051b0190565b634e487b7160e01b600052603260045260246000fd5b908082101561047e570390565b900390565b63ffffffff168015614bad5760018114614a9557600281146148d9576003811461466a576004908181146143425760058114613f775760068114613afa57600781146135cc5760088114612fef576009811461296c57600a811461223957600b81146119bf57600c03610ec15760405190610d008201908282106001600160401b03831117610eac5750604052610cc1815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201527f65222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231610ac08201527f31352c3131352039372c3231203132362c3136222066696c6c3d226e6f6e6522610ae08201527f207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d610b008201527f22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174610b208201527f655472616e73666f726d206174747269627574654e616d653d227472616e7366610b408201527f6f726d2220617474726962757465547970653d22584d4c2220747970653d2272610b608201527f6f74617465222066726f6d3d223020313135203131352220746f3d2233363020610b808201527f3131352031313522206475723d223130732220726570656174436f756e743d22610ba08201527f696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20610bc08201527f706f696e74733d223131352c313135203132362c3136203135342c3139222066610be08201527f696c6c3d226e6f6e6522207374726f6b653d22776869746522207374726f6b65610c008201527f2d6c696e656a6f696e3d22726f756e6422207374726f6b652d77696474683d22610c208201527f32223e3c616e696d6174655472616e73666f726d206174747269627574654e61610c408201527f6d653d227472616e73666f726d2220617474726962757465547970653d22584d610c608201527f4c2220747970653d22726f74617465222066726f6d3d22302031313520313135610c808201527f2220746f3d22333630203131352031313522206475723d223130732220726570610ca08201527f656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e610cc0820152601f60f91b610ce082015290565b604190634e487b7160e01b6000525260246000fd5b60405190610e008201908282106001600160401b03831117610eac5750604052610dcb815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201527f65222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231610ac08201527f31352c3131352039372c3231203132362c3136222066696c6c3d226e6f6e6522610ae08201527f207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d610b008201527f22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174610b208201527f655472616e73666f726d206174747269627574654e616d653d227472616e7366610b408201527f6f726d2220617474726962757465547970653d22584d4c2220747970653d2272610b608201527f6f74617465222066726f6d3d223020313135203131352220746f3d2233363020610b808201527f3131352031313522206475723d223130732220726570656174436f756e743d22610ba08201527f696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20610bc08201527f706f696e74733d223131352c313135203132362c3136203135342c3139222066610be08201527f696c6c3d226e6f6e6522207374726f6b653d22776869746522207374726f6b65610c008201527f2d6c696e656a6f696e3d22726f756e6422207374726f6b652d77696474683d22610c208201527f32223e3c616e696d6174655472616e73666f726d206174747269627574654e61610c408201527f6d653d227472616e73666f726d2220617474726962757465547970653d22584d610c608201527f4c2220747970653d22726f74617465222066726f6d3d22302031313520313135610c808201527f2220746f3d22333630203131352031313522206475723d223130732220726570610ca08201527f656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e610cc08201527f3e3c706f6c79676f6e20706f696e74733d223131352c313135203135342c3139610ce08201527f203138312c3330222066696c6c3d226e6f6e6522207374726f6b653d22776869610d008201527f746522207374726f6b652d6c696e656a6f696e3d22726f756e6422207374726f610d208201527f6b652d77696474683d2232223e3c616e696d6174655472616e73666f726d2061610d408201527f74747269627574654e616d653d227472616e73666f726d222061747472696275610d608201527f7465547970653d22584d4c2220747970653d22726f74617465222066726f6d3d610d808201527f223020313135203131352220746f3d2233363020313135203131352220647572610da08201527f3d223130732220726570656174436f756e743d22696e646566696e697465222f610dc08201526a1f1e17b837b63cb3b7b71f60a91b610de082015290565b5060405190610be08201908282106001600160401b03831117610eac5750604052610bb7815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201527f65222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231610ac08201527f31352c3131352039372c3231203132362c3136222066696c6c3d226e6f6e6522610ae08201527f207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d610b008201527f22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174610b208201527f655472616e73666f726d206174747269627574654e616d653d227472616e7366610b408201527f6f726d2220617474726962757465547970653d22584d4c2220747970653d2272610b608201527f6f74617465222066726f6d3d223020313135203131352220746f3d2233363020610b808201527f3131352031313522206475723d223130732220726570656174436f756e743d22610ba08201527f696e646566696e697465222f3e3c2f706f6c79676f6e3e000000000000000000610bc082015290565b5060405190610ae08201908282106001600160401b03831117610eac5750604052610aae815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015260008051602061520f8339815191526109c082015260008051602061544f8339815191526109e0820152600080516020614e0f833981519152610a008201526000805160206154cf833981519152610a20820152600080516020614f8f833981519152610a40820152600080516020614e4f833981519152610a608201526000805160206154ef833981519152610a8082015260008051602061502f833981519152610aa08201526d3291179f1e17b837b63cb3b7b71f60911b610ac082015290565b50604051906109e08201908282106001600160401b03831117610eac57506040526109a6815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201526000805160206155af8339815191526108a0820152600080516020614c2f8339815191526108c082015260008051602061506f8339815191526108e08201526000805160206152ef83398151915261090082015260008051602061548f83398151915261092082015260008051602061564f8339815191526109408201526000805160206155cf83398151915261096082015260008051602061512f8339815191526109808201526000805160206150cf8339815191526109a082015265363cb3b7b71f60d11b6109c082015290565b50604051906108c08201908282106001600160401b03831117610eac575060405261089e815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f833981519152610780820152600080516020614fcf8339815191526107a082015260008051602061568f8339815191526107c0820152600080516020614fef8339815191526107e0820152600080516020614c0f83398151915261080082015260008051602061536f83398151915261082082015260008051602061558f8339815191526108408201526000805160206155ef8339815191526108608201526000805160206150ef8339815191526108808201527f436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e3e00006108a082015290565b50604051906107c08201908282106001600160401b03831117610eac5750604052610796815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526000805160206153cf8339815191526106a08201526000805160206154af8339815191526106c0820152600080516020614dcf8339815191526106e0820152600080516020614d0f833981519152610700820152600080516020614f6f83398151915261072082015260008051602061516f83398151915261074082015260008051602061518f83398151915261076082015260008051602061500f83398151915261078082015275373232b334b734ba3291179f1e17b837b63cb3b7b71f60511b6107a082015290565b50604051906106c08201908282106001600160401b03831117610eac575060405261068d815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f83398151915261058082015260008051602061540f8339815191526105a0820152600080516020614eaf8339815191526105c082015260008051602061504f8339815191526105e0820152600080516020614d4f833981519152610600820152600080516020614e2f83398151915261062082015260008051602061554f833981519152610640820152600080516020614c4f83398151915261066082015260008051602061534f8339815191526106808201526c11179f1e17b837b63cb3b7b71f60991b6106a082015290565b50604051906105c08201908282106001600160401b03831117610eac5750604052610583815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201526000805160206150af833981519152610480820152600080516020614f4f8339815191526104a082015260008051602061560f8339815191526104c0820152600080516020614d2f8339815191526104e08201526000805160206151ef833981519152610500820152600080516020614d6f833981519152610520820152600080516020614eef833981519152610540820152600080516020614f0f833981519152610560820152600080516020614e6f8339815191526105808201526237b71f60e91b6105a082015290565b50604051906104a08201908282106001600160401b03831117610eac5750604052610479815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef833981519152610360820152600080516020614e8f83398151915261038082015260008051602061542f8339815191526103a08201526000805160206151cf8339815191526103c0820152600080516020614caf8339815191526103e08201526000805160206151af83398151915261040082015260008051602061524f8339815191526104208201526000805160206152af83398151915261044082015260008051602061530f8339815191526104608201527f3d22696e646566696e697465222f3e3c2f706f6c79676f6e3e0000000000000061048082015290565b506040516103a081018181106001600160401b038211176104195760405261036f815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af83398151915261026082015260008051602061550f83398151915261028082015260008051602061538f8339815191526102a082015260008051602061510f8339815191526102c0820152600080516020614c6f8339815191526102e082015260008051602061532f8339815191526103008201526000805160206152cf83398151915261032082015260008051602061514f833981519152610340820152600080516020614cef8339815191526103608201526e3a3291179f1e17b837b63cb3b7b71f60891b61038082015290565b506040516102a081018181106001600160401b0382111761041957604052610264815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f83398151915261014082015260008051602061528f833981519152610160820152600080516020614daf833981519152610180820152600080516020614ccf8339815191526101a0820152600080516020614ecf8339815191526101c082015260008051602061522f8339815191526101e0820152600080516020614f2f833981519152610200820152600080516020614def83398151915261022082015260008051602061552f8339815191526102408201526000805160206153af8339815191526102608201526333b7b71f60e11b61028082015290565b5060405161018081018181106001600160401b0382111761041957604052610158815260008051602061508f833981519152602082015260008051602061562f8339815191526040820152600080516020614faf833981519152606082015260008051602061526f8339815191526080820152600080516020614c8f83398151915260a08201526000805160206153ef83398151915260c0820152600080516020614d8f83398151915260e082015260008051602061556f83398151915261010082015260008051602061566f83398151915261012082015260008051602061546f8339815191526101408201527f22696e646566696e697465222f3e3c2f706f6c79676f6e3e000000000000000061016082015290565b50604051608081018181106001600160401b0382111761041957604052604c815260008051602061508f833981519152602082015260008051602061562f83398151915260408201526b18161816181718949110179f60a11b60608201529056fe6e656a6f696e3d22726f756e6422207374726f6b652d77696474683d2232223e6f6c79676f6e20706f696e74733d223131352c3131352035322c35362037322c6d3d223020313135203131352220746f3d2233363020313135203131352220647374726f6b652d77696474683d2232223e3c616e696d6174655472616e73666f22207374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e6e3d22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d222066696c6c3d226e6f6e6522207374726f6b653d2277686974652220737472206475723d223130732220726570656174436f756e743d22696e646566696e69726f756e6422207374726f6b652d77696474683d2232223e3c616e696d6174656b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d7769647468726f6b652d77696474683d2232223e3c616e696d6174655472616e73666f726d4e616d653d227472616e73666f726d2220617474726962757465547970653d2274655472616e73666f726d206174747269627574654e616d653d227472616e7320706f696e74733d223131352c313135203134342c313434203132332c3136347374726f6b653d22776869746522207374726f6b652d6c696e656a6f696e3d2222584d4c2220747970653d22726f74617465222066726f6d3d22302031313520776869746522207374726f6b652d6c696e656a6f696e3d22726f756e64222073206174747269627574654e616d653d227472616e73666f726d222061747472696962757465547970653d22584d4c2220747970653d22726f74617465222066726570656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79677465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2233382033392c313131222066696c6c3d226e6f6e6522207374726f6b653d22776f6b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d77696474584d4c2220747970653d22726f74617465222066726f6d3d223020313135203131352220746f3d22333630203131352031313522206475723d22313073222072654e616d653d227472616e73666f726d2220617474726962757465547970653d6e20706f696e74733d223131352c3131352036382c3135392034382c313338225472616e73666f726d206174747269627574654e616d653d227472616e73666f6d206174747269627574654e616d653d227472616e73666f726d222061747472302c302c302e312922202f3e3c706f6c79676f6e20706f696e74733d223131356e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20703d226e6f6e6522207374726f6b653d22776869746522207374726f6b652d6c6931352031313522206475723d223130732220726570656174436f756e743d22696475723d223130732220726570656174436f756e743d22696e646566696e69746869746522207374726f6b652d6c696e656a6f696e3d22726f756e64222073743335222066696c6c3d226e6f6e6522207374726f6b653d2277686974652220733c726563742077696474683d2232333022206865696768743d223233302220723d22696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f2220726570656174436f756e743d22696e646566696e697465222f3e3c2f706f6f3d22333630203131352031313522206475723d22313073222072657065617422776869746522207374726f6b652d6c696e656a6f696e3d22726f756e64222035203131352220746f3d22333630203131352031313522206475723d22313073726f6d3d223020313135203131352220746f3d22333630203131352031313522726d2220617474726962757465547970653d22584d4c2220747970653d22726f74617465222066726f6d3d223020313135203131352220746f3d2233363020316174655472616e73666f726d206174747269627574654e616d653d227472616e6522207374726f6b653d22776869746522207374726f6b652d6c696e656a6f693d2232223e3c616e696d6174655472616e73666f726d206174747269627574656c79676f6e3e3c706f6c79676f6e20706f696e74733d223131352c3131352037683d2232223e3c616e696d6174655472616e73666f726d20617474726962757473666f726d2220617474726962757465547970653d22584d4c2220747970653d2c313135203134342c313135203134342c313434222066696c6c3d226e6f6e6522696e646566696e697465222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e22726f74617465222066726f6d3d223020313135203131352220746f3d223336726962757465547970653d22584d4c2220747970653d22726f7461746522206674726f6b652d6c696e656a6f696e3d22726f756e6422207374726f6b652d776930203131352031313522206475723d223130732220726570656174436f756e74726d206174747269627574654e616d653d227472616e73666f726d222061747475723d223130732220726570656174436f756e743d22696e646566696e6974653c616e696d6174655472616e73666f726d206174747269627574654e616d653d2c3136342039352c313639222066696c6c3d226e6f6e6522207374726f6b653d726570656174436f756e743d22696e646566696e697465222f3e3c2f706f6c79222f3e3c2f706f6c79676f6e3e3c706f6c79676f6e20706f696e74733d2231313d22726f756e6422207374726f6b652d77696474683d2232223e3c616e696d616f6e3e3c706f6c79676f6e20706f696e74733d223131352c3131352034382c313131352c3131352039352c3136392036382c313539222066696c6c3d226e6f6e322c33352039372c3231222066696c6c3d226e6f6e6522207374726f6b653d22203131352031313522206475723d223130732220726570656174436f756e743d6474683d2232223e3c616e696d6174655472616e73666f726d20617474726962352c3131352033392c3131312034312c3832222066696c6c3d226e6f6e65222074726f6b652d77696474683d2232223e3c616e696d6174655472616e73666f726f6d3d223020313135203131352220746f3d2233363020313135203131352220676f6e3e3c706f6c79676f6e20706f696e74733d223131352c313135203132333131352220746f3d22333630203131352031313522206475723d22313073222062757465547970653d22584d4c2220747970653d22726f74617465222066726f666f726d2220617474726962757465547970653d22584d4c2220747970653d22227472616e73666f726d2220617474726962757465547970653d22584d4c2220436f756e743d22696e646566696e697465222f3e3c2f706f6c79676f6e3e3c70653d22584d4c2220747970653d22726f74617465222066726f6d3d2230203131747970653d22726f74617465222066726f6d3d223020313135203131352220742066696c6c3d226e6f6e6522207374726f6b653d22776869746522207374726f783d2231387078222072793d2231387078222066696c6c3d227267626128302c7574654e616d653d227472616e73666f726d2220617474726962757465547970726f74617465222066726f6d3d223020313135203131352220746f3d223336306f696e74733d223131352c3131352034312c38322035322c3536222066696c6ca2646970667358221220bf6e990151c78849f1262cf7913c3a738f7bf79d3b1c8760098e8800fecf7d2464736f6c63430008110033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.