{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20MintBurn",
  "sourceName": "contracts/token/ERC20/preset/ERC20MintBurn.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "tokenDecimals",
          "type": "uint8"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "increment",
          "type": "uint256"
        }
      ],
      "name": "ERC20AllowanceOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20ApprovalToAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20BatchMintValuesOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20BatchTransferValuesOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "decrement",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20MintToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC20PermitExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20PermitFromAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20PermitInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ERC20SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20TotalSupplyOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20TransferToAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InconsistentArrayLengths",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenContract",
          "type": "address"
        }
      ],
      "name": "IncorrectTokenContractType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotRoleHolder",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "owners",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchBurnFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "hasRole_",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC20s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC721[]",
          "name": "contracts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC721s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "name": "setTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052346105d95761403d80380380610019816105de565b9283398101906080818303126105d95780516001600160401b0381116105d95782610045918301610603565b602082015190926001600160401b0382116105d957610065918301610603565b9160408201519160ff83168093036105d95760600151916001600160a01b03831683036105d9577fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527f9aed5868410a44d2b2b5afc971a20f888382428fa3391cbfac5b1840d2aa352f8054600160ff199182168117909255634e83a8c360e11b6000527fc6b5f03b0da98290ffa91f37e0f0b8e2702961697d46a1f6b2d24c3136073a6680549091169091179055825190926001600160401b0382116104af57600080516020613ffd8339815191525490600182811c921680156105cf575b602083101461048f5781601f849311610552575b50602090601f83116001146104d0576000926104c5575b50508160011b916000199060031b1c191617600080516020613ffd833981519152555b83516001600160401b0381116104af57600080516020613fdd83398151915254600181811c911680156104a5575b602082101461048f57601f811161041d575b50602094601f821160011461039c57948192939495600092610391575b50508160011b916000199060031b1c191617600080516020613fdd833981519152555b60ff1960008051602061401d83398151915254161760008051602061401d8339815191525563a219a02560e01b600052806020526040600020600160ff1982541617905533610332575b6307f5828d60e41b600090815260209190915260408082208054600160ff1991821681179092556303c130d960e41b84528284208054821683179055634ec7fbed60e11b845282842080548216831790556353f41a9760e01b8452828420805482168317905563602993f360e11b8452828420805482168317905563144b1f0f60e11b845282842080548216831790556320c07ed160e01b8452928290208054909316179091556080919091525161396e908161066f82396080518181816120560152818161252001526136ba0152f35b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3610261565b0151905038806101f4565b601f19821695600080516020613fdd833981519152600052806000209160005b888110610405575083600195969798106103ec575b505050811b01600080516020613fdd83398151915255610217565b015160001960f88460031b161c191690553880806103d1565b919260206001819286850151815501940192016103bc565b600080516020613fdd8339815191526000527f38f29baf5b4f1132a8b8d899467148f866f7b7a6d08f3c484abb8c5467292cef601f830160051c81019160208410610485575b601f0160051c01905b81811061047957506101d7565b6000815560010161046c565b9091508190610463565b634e487b7160e01b600052602260045260246000fd5b90607f16906101c5565b634e487b7160e01b600052604160045260246000fd5b015190503880610174565b600080516020613ffd83398151915260009081528281209350601f198516905b81811061053a5750908460019594939210610521575b505050811b01600080516020613ffd83398151915255610197565b015160001960f88460031b161c19169055388080610506565b929360206001819287860151815501950193016104f0565b600080516020613ffd8339815191526000529091507fce6c9d9c5887233b79e8966827dc87013a092e23a7d6c4dfeb06be71659aa428601f840160051c810191602085106105c5575b90601f859493920160051c01905b8181106105b6575061015d565b600081558493506001016105a9565b909150819061059b565b91607f1691610149565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176104af57604052565b81601f820112156105d9578051906001600160401b0382116104af57610632601f8301601f19166020016105de565b92828452602083830101116105d95760005b82811061065957505060206000918301015290565b8060208092840101518282870101520161064456fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146122a057806306fdde0314612245578063095ea7b3146121d857806318160ddd1461217d5780631b9a75291461213957806323b872dd1461207a5780632b4c9f161461200b5780632f2ff15d14611e7f578063313ce56714611e215780633644e51514611de05780633950935114611bb05780633c130d9014611b5557806340c10f191461199257806342966c681461192e5780634885b25414611880578063572b6c0514611835578063685731071461171a57806370a082311461169557806373c8a9581461151257806379cc67901461145d5780637ecebe00146113d857806388d695b2146113945780638bb9c5bf146112255780638da5cb5b146111b457806391d148541461111c57806395d89b41146110a9578063a457c2d71461103c578063a9059cbb14610fcf578063b88d4fde14610ebf578063c3666c3614610c82578063d505accf14610a0f578063d5391393146109b6578063d547741f1461082d578063dd62ed3e1461077e578063e0df5b6f14610533578063eb7955491461046e578063f2fde38b1461037b5763f7ba94bd146101be57600080fd5b3461031f576101cc366123dc565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061020d6136a3565b925416911690810361034e57508181036103245760005b81811061022d57005b61023881838761284a565b3573ffffffffffffffffffffffffffffffffffffffff811680910361031f5761026282858761284a565b35908147106102ed57600080809381935af13d156102e5573d906102858261361a565b916102936040519384612568565b82523d6000602084013e5b156102ac5750600101610224565b8051156102bb57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b60609061029e565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576103b2612365565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc6103db6136a3565b9080549273ffffffffffffffffffffffffffffffffffffffff808516931683810361034e575073ffffffffffffffffffffffffffffffffffffffff169283830361042157005b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b3461031f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576104a5612365565b60243560443567ffffffffffffffff811161031f576104c89036906004016124db565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9261050183836104fa6136a3565b80976134c5565b813b610513575b602060405160018152f35b61052994610522913691613654565b92806137b7565b8080808080610508565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5760043567ffffffffffffffff811161031f576105829036906004016124db565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806105c16136a3565b925416911690810361034e57507ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea9067ffffffffffffffff811161074f576106098254612670565b601f8111610707575b506000601f821160011461066c57819293600092610661575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179055600080f35b01359050838061062b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216938382526020822091805b8681106106ef57508360019596106106b7575b505050811b019055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558380806106ad565b9092602060018192868601358155019401910161069a565b826000526020600020601f830160051c81019160208410610745575b601f0160051c01905b8181106107395750610612565b6000815560010161072c565b9091508190610723565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576107b5612365565b73ffffffffffffffffffffffffffffffffffffffff6107d2612388565b91166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef60205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57600435610867612388565b61086f6136a3565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034e57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541661092157005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b3461031f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610a46612365565b610a4e612388565b6044359060643560843560ff811680910361031f5773ffffffffffffffffffffffffffffffffffffffff8516917f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d8315610c5857814211610c2a576020926000926080928685528552604084209081549160018301905560405190868201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9845288604084015273ffffffffffffffffffffffffffffffffffffffff8a1660608401528a8684015260a083015260c082015260c08152610b3060e082612568565b519020610b3b6129f4565b9060405190868201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152610b80606282612568565b519020906040519182528482015260a435604082015260c435606082015282805260015afa15610c1e5773ffffffffffffffffffffffffffffffffffffffff6000511603610bf457610bf2927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee612785565b005b7f822a64c80000000000000000000000000000000000000000000000000000000060005260046000fd5b6040513d6000823e3d90fd5b507fea2b6f580000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7fa97469760000000000000000000000000000000000000000000000000000000060005260046000fd5b3461031f57610c903661244c565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610cd56136a3565b925416911690810361034e5750808214801590610eb5575b6103245760005b828110610cfd57005b73ffffffffffffffffffffffffffffffffffffffff610d25610d2083858a61284a565b612889565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c1e57600091610e87575b5015610e5a575073ffffffffffffffffffffffffffffffffffffffff610db4610d2083858a61284a565b1690610dc4610d2082868961284a565b91610dd082878b61284a565b3592813b1561031f57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610c1e57600192610e49575b5001610cf4565b6000610e5491612568565b88610e42565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610ea8915060203d8111610eae575b610ea08183612568565b81019061368b565b89610d8a565b503d610e96565b5082821415610ced565b3461031f5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610ef6612365565b610efe612388565b60443560643567ffffffffffffffff811161031f57610f219036906004016124db565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee93610f8d848484610f546136a3565b9873ffffffffffffffffffffffffffffffffffffffff8a1673ffffffffffffffffffffffffffffffffffffffff831603610fbe576134c5565b823b610f9e57602060405160018152f35b610fb395610fad913691613654565b936137b7565b808080808080610508565b610fca848b84846132e7565b6134c5565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508611009612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6110366136a3565b906134c5565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508611076612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6110a36136a3565b906132e7565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576111186111047f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a826126c3565b604051918291602083526020830190612306565b0390f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57611153612388565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004356112806136a3565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff604060002054161561134c5760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081016109b1565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b3461031f576105086113a5366123dc565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6113d26136a3565b9061308e565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5761140f612365565b73ffffffffffffffffffffffffffffffffffffffff7f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d91166000526020526020604060002054604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508611497612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6114c46136a3565b8373ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff851603611500575b5050612b5d565b61150b9184846132e7565b84836114f9565b3461031f576115203661244c565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806115636136a3565b925416911690810361034e575080831480159061168b575b6103245760005b83811061158b57005b61159681838861284a565b3573ffffffffffffffffffffffffffffffffffffffff81169081810361031f5760006020918a826115d7876115d0610d20828f8f9061284a565b938b61284a565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb000000000000000000000000000000000000000000000000000000008652166024830152604482015260448152611632606482612568565b51925af115610c1e576000513d6116825750803b155b6116555750600101611582565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611648565b508583141561157b565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576116cc612365565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91166000526020526020604060002054604051908152f35b3461031f57611728366123dc565b92909161175d7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226117576136a3565b90612a9b565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee90611788816125a9565b926117966040519485612568565b818452602084019160051b81019036821161031f57915b818310611808575050506117c0846125a9565b926117ce6040519485612568565b848452602084019460051b81019036821161031f57945b8186106117f8575050610bf29350612f3e565b85358152602095860195016117e5565b823573ffffffffffffffffffffffffffffffffffffffff8116810361031f578152602092830192016117ad565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576020611876611871612365565b612509565b6040519015158152f35b3461031f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576118b7612365565b60243567ffffffffffffffff811161031f576118d79036906004016123ab565b916044359267ffffffffffffffff841161031f576118fc6105089436906004016123ab565b9390927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6119286136a3565b90612c7e565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576105086004357f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee61198c6136a3565b90612b5d565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576119c9612365565b6024356119f87fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226117576136a3565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9216918215611b2b5781611a6d575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600092604051908152a3005b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0548281019080821115611af957507f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0556000838152602091909152604090208054820190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611a3d565b83907f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b7f92fd9c8f0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576111186111047ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea6126c3565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57611be7612365565b602435611bf26136a3565b9073ffffffffffffffffffffffffffffffffffffffff8316928315611d9c5773ffffffffffffffffffffffffffffffffffffffff83166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef6020526040600020846000526020526040600020549180611cb7575b84837f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602073ffffffffffffffffffffffffffffffffffffffff886040519485521692a3602060405160018152f35b8083019280841115611d4157505050602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928185166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef83526040600020866000528352806040600020559250611c68565b6040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015293909316602484015260448301526064820152608490fd5b73ffffffffffffffffffffffffffffffffffffffff837ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576020611e196129f4565b604051908152f35b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57602060ff7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57600435611eb9612388565b611ec16136a3565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034e57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611f7457005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080606081016109b1565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461031f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576105086120b4612365565b6120bc612388565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee916120e66136a3565b92604435938473ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff851603612127575b50506134c5565b6121329184846132e7565b8584612120565b3461031f5761050861214a366123dc565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6121776136a3565b906128aa565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5760207f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf054604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508612212612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee61223f6136a3565b90612785565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576111186111047f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a816126c3565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361031f576118766020916125c1565b919082519283825260005b8481106123505750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201612311565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031f57565b9181601f8401121561031f5782359167ffffffffffffffff831161031f576020808501948460051b01011161031f57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261031f5760043567ffffffffffffffff811161031f5781612425916004016123ab565b929092916024359067ffffffffffffffff821161031f57612448916004016123ab565b9091565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261031f5760043567ffffffffffffffff811161031f5781612495916004016123ab565b9290929160243567ffffffffffffffff811161031f57816124b8916004016123ab565b929092916044359067ffffffffffffffff821161031f57612448916004016123ab565b9181601f8401121561031f5782359167ffffffffffffffff831161031f576020838186019501011161031f57565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156125615773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761074f57604052565b67ffffffffffffffff811161074f5760051b60200190565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff00000000000000000000000000000000000000000000000000000000811461266a577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612664576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b90600182811c921680156126b9575b602083101461268a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161267f565b90604051918260008254926126d784612670565b808452936001811690811561274557506001146126fe575b506126fc92500383612568565b565b90506000929192526020600020906000915b8183106127295750509060206126fc92820101386126ef565b6020919350806001915483858901015201910190918492612710565b602093506126fc9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386126ef565b929173ffffffffffffffffffffffffffffffffffffffff169283156128065773ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260016020938383166000520183526040600020866000528352846040600020556040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff827ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b919081101561285a5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361031f5790565b9392948086036103245785156129ec5760009560005b8181106128e157505050505050816128d6575050565b600201908154039055565b6128ef610d2082848861284a565b6128fa82858961284a565b3573ffffffffffffffffffffffffffffffffffffffff821691818773ffffffffffffffffffffffffffffffffffffffff811685036129da575b509050612972575b600192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600093604051908152a3016128c0565b98604060008381528a60205220548a810390808210156129a45750600083815260208b9052604090205589019861293b565b8b90847fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6129e4928c6132e7565b388187612933565b505050505050565b612a1d7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a816126c3565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a08152612a9560c082612568565b51902090565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff6040600020541615612af55750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b82612bab575b50907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6000946040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612c32575073ffffffffffffffffffffffffffffffffffffffff8316600090815260208390526040902055600201805483900390557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612b63565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b95949093929192858103610324578015612f215773ffffffffffffffffffffffffffffffffffffffff8416600052866020526040600020549160009660009260005b818110612d1a575050505050505073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821603612d08575b50505050565b612d11936132e7565b38808080612d02565b73ffffffffffffffffffffffffffffffffffffffff612d3d610d2083858b61284a565b168015612edd57612d4f82858761284a565b3580612e19575b906020917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef73ffffffffffffffffffffffffffffffffffffffff8c16938492604051908152a38a151580612e0f575b612db3575b50600101612cc0565b8a87039087821015612dd957600090815260208d90526040902090860190556001612daa565b878c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50858b1415612da5565b9a8b810190811115612eb3579a8c73ffffffffffffffffffffffffffffffffffffffff8b16838114612e655750906040602093926000908482528552208181540190555b909150612d56565b90508882989211612e7d575090866020920196612e5d565b8888917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7fdedd83410000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff897f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50505050505050565b805182101561285a5760209160051b010190565b909182519080518203610324578115612d025760009360005b838110612fb2575050505081612f6b575050565b6002018054918083019280841115612f8257505055565b7f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff612fd18284612f2a565b51168015611b2b57612fe38285612f2a565b5180613021575b9060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060019594604051908152a301612f57565b969190878301928311156130645773ffffffffffffffffffffffffffffffffffffffff811660009081526020889052604090208054890190559196909190612fea565b7f5542ae7c0000000000000000000000000000000000000000000000000000000060005260046000fd5b92939490918185036103245784156129ec5773ffffffffffffffffffffffffffffffffffffffff8316600052836020526040600020549560009260009660005b81811061318057505050505080151580613176575b6130ef575b5050505050565b808503948086101561312c57505073ffffffffffffffffffffffffffffffffffffffff1660005260205260406000209101905538808080806130e8565b73ffffffffffffffffffffffffffffffffffffffff837fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50838114156130e3565b73ffffffffffffffffffffffffffffffffffffffff6131a3610d2083858961284a565b1680156132a3576131b582858761284a565b3580613209575b90600192916040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff8c1692a3016130ce565b9687810190811115612eb3579673ffffffffffffffffffffffffffffffffffffffff891682811461325657509060019291604060008381528c602052208181540190555b909192506131bc565b8c829c921161326d5750908a60019392019a61324d565b8c8c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff887f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b92909173ffffffffffffffffffffffffffffffffffffffff8116938415613481576001019073ffffffffffffffffffffffffffffffffffffffff841660005281602052604060002085600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84141580613478575b6133b4575b50505090602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926040519485521692a3565b808403938085101561341d5750505073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260209282861660005283526040600020866000528352806040600020559261336c565b6040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015293909316602484015260448301526064820152608490fd5b50801515613367565b73ffffffffffffffffffffffffffffffffffffffff847ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b929173ffffffffffffffffffffffffffffffffffffffff169283156135d6578261352f575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612c3257508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9716036135af575b50509250506134ea565b838316600052818552604060002055866000528352604060002085815401905538806135a5565b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b67ffffffffffffffff811161074f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926136608261361a565b9161366e6040519384612568565b82948184528183011161031f578281602093846000960137010152565b9081602091031261031f5751801515810361031f5790565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156137a85732331480156137ad575b6137a8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c9080331490811561372e575b5061372b57503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa908115610c1e57600091613789575b5038613721565b6137a2915060203d602011610eae57610ea08183612568565b38613782565b503390565b50601836106136ea565b61382673ffffffffffffffffffffffffffffffffffffffff9294958360209516968460405197889687967f4fc358590000000000000000000000000000000000000000000000000000000088521660048701521660248501526044840152608060648401526084830190612306565b03816000865af1908115610c1e576000916138b6575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc35859000000000000000000000000000000000000000000000000000000009116036138895750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d602011613930575b816138cf60209383612568565b8101031261392c5751907fffffffff000000000000000000000000000000000000000000000000000000008216820361392957507fffffffff0000000000000000000000000000000000000000000000000000000061383c565b80fd5b5080fd5b3d91506138c256fea2646970667358221220fe4e70044e588d96a7172d6571a03b2ddf9c6008383e09c35cc4d3ca8cf3282b64736f6c634300081e0033335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a83",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a7146122a057806306fdde0314612245578063095ea7b3146121d857806318160ddd1461217d5780631b9a75291461213957806323b872dd1461207a5780632b4c9f161461200b5780632f2ff15d14611e7f578063313ce56714611e215780633644e51514611de05780633950935114611bb05780633c130d9014611b5557806340c10f191461199257806342966c681461192e5780634885b25414611880578063572b6c0514611835578063685731071461171a57806370a082311461169557806373c8a9581461151257806379cc67901461145d5780637ecebe00146113d857806388d695b2146113945780638bb9c5bf146112255780638da5cb5b146111b457806391d148541461111c57806395d89b41146110a9578063a457c2d71461103c578063a9059cbb14610fcf578063b88d4fde14610ebf578063c3666c3614610c82578063d505accf14610a0f578063d5391393146109b6578063d547741f1461082d578063dd62ed3e1461077e578063e0df5b6f14610533578063eb7955491461046e578063f2fde38b1461037b5763f7ba94bd146101be57600080fd5b3461031f576101cc366123dc565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061020d6136a3565b925416911690810361034e57508181036103245760005b81811061022d57005b61023881838761284a565b3573ffffffffffffffffffffffffffffffffffffffff811680910361031f5761026282858761284a565b35908147106102ed57600080809381935af13d156102e5573d906102858261361a565b916102936040519384612568565b82523d6000602084013e5b156102ac5750600101610224565b8051156102bb57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b60609061029e565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576103b2612365565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc6103db6136a3565b9080549273ffffffffffffffffffffffffffffffffffffffff808516931683810361034e575073ffffffffffffffffffffffffffffffffffffffff169283830361042157005b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b3461031f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576104a5612365565b60243560443567ffffffffffffffff811161031f576104c89036906004016124db565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9261050183836104fa6136a3565b80976134c5565b813b610513575b602060405160018152f35b61052994610522913691613654565b92806137b7565b8080808080610508565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5760043567ffffffffffffffff811161031f576105829036906004016124db565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806105c16136a3565b925416911690810361034e57507ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea9067ffffffffffffffff811161074f576106098254612670565b601f8111610707575b506000601f821160011461066c57819293600092610661575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179055600080f35b01359050838061062b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216938382526020822091805b8681106106ef57508360019596106106b7575b505050811b019055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558380806106ad565b9092602060018192868601358155019401910161069a565b826000526020600020601f830160051c81019160208410610745575b601f0160051c01905b8181106107395750610612565b6000815560010161072c565b9091508190610723565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576107b5612365565b73ffffffffffffffffffffffffffffffffffffffff6107d2612388565b91166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef60205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57600435610867612388565b61086f6136a3565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034e57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541661092157005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b3461031f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610a46612365565b610a4e612388565b6044359060643560843560ff811680910361031f5773ffffffffffffffffffffffffffffffffffffffff8516917f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d8315610c5857814211610c2a576020926000926080928685528552604084209081549160018301905560405190868201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9845288604084015273ffffffffffffffffffffffffffffffffffffffff8a1660608401528a8684015260a083015260c082015260c08152610b3060e082612568565b519020610b3b6129f4565b9060405190868201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152610b80606282612568565b519020906040519182528482015260a435604082015260c435606082015282805260015afa15610c1e5773ffffffffffffffffffffffffffffffffffffffff6000511603610bf457610bf2927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee612785565b005b7f822a64c80000000000000000000000000000000000000000000000000000000060005260046000fd5b6040513d6000823e3d90fd5b507fea2b6f580000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7fa97469760000000000000000000000000000000000000000000000000000000060005260046000fd5b3461031f57610c903661244c565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610cd56136a3565b925416911690810361034e5750808214801590610eb5575b6103245760005b828110610cfd57005b73ffffffffffffffffffffffffffffffffffffffff610d25610d2083858a61284a565b612889565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c1e57600091610e87575b5015610e5a575073ffffffffffffffffffffffffffffffffffffffff610db4610d2083858a61284a565b1690610dc4610d2082868961284a565b91610dd082878b61284a565b3592813b1561031f57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610c1e57600192610e49575b5001610cf4565b6000610e5491612568565b88610e42565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610ea8915060203d8111610eae575b610ea08183612568565b81019061368b565b89610d8a565b503d610e96565b5082821415610ced565b3461031f5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610ef6612365565b610efe612388565b60443560643567ffffffffffffffff811161031f57610f219036906004016124db565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee93610f8d848484610f546136a3565b9873ffffffffffffffffffffffffffffffffffffffff8a1673ffffffffffffffffffffffffffffffffffffffff831603610fbe576134c5565b823b610f9e57602060405160018152f35b610fb395610fad913691613654565b936137b7565b808080808080610508565b610fca848b84846132e7565b6134c5565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508611009612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6110366136a3565b906134c5565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508611076612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6110a36136a3565b906132e7565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576111186111047f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a826126c3565b604051918291602083526020830190612306565b0390f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57611153612388565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004356112806136a3565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff604060002054161561134c5760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081016109b1565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b3461031f576105086113a5366123dc565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6113d26136a3565b9061308e565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5761140f612365565b73ffffffffffffffffffffffffffffffffffffffff7f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d91166000526020526020604060002054604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508611497612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6114c46136a3565b8373ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff851603611500575b5050612b5d565b61150b9184846132e7565b84836114f9565b3461031f576115203661244c565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806115636136a3565b925416911690810361034e575080831480159061168b575b6103245760005b83811061158b57005b61159681838861284a565b3573ffffffffffffffffffffffffffffffffffffffff81169081810361031f5760006020918a826115d7876115d0610d20828f8f9061284a565b938b61284a565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb000000000000000000000000000000000000000000000000000000008652166024830152604482015260448152611632606482612568565b51925af115610c1e576000513d6116825750803b155b6116555750600101611582565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611648565b508583141561157b565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576116cc612365565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91166000526020526020604060002054604051908152f35b3461031f57611728366123dc565b92909161175d7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226117576136a3565b90612a9b565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee90611788816125a9565b926117966040519485612568565b818452602084019160051b81019036821161031f57915b818310611808575050506117c0846125a9565b926117ce6040519485612568565b848452602084019460051b81019036821161031f57945b8186106117f8575050610bf29350612f3e565b85358152602095860195016117e5565b823573ffffffffffffffffffffffffffffffffffffffff8116810361031f578152602092830192016117ad565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576020611876611871612365565b612509565b6040519015158152f35b3461031f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576118b7612365565b60243567ffffffffffffffff811161031f576118d79036906004016123ab565b916044359267ffffffffffffffff841161031f576118fc6105089436906004016123ab565b9390927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6119286136a3565b90612c7e565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576105086004357f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee61198c6136a3565b90612b5d565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576119c9612365565b6024356119f87fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226117576136a3565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9216918215611b2b5781611a6d575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600092604051908152a3005b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0548281019080821115611af957507f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf0556000838152602091909152604090208054820190557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611a3d565b83907f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b7f92fd9c8f0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576111186111047ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea6126c3565b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57611be7612365565b602435611bf26136a3565b9073ffffffffffffffffffffffffffffffffffffffff8316928315611d9c5773ffffffffffffffffffffffffffffffffffffffff83166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef6020526040600020846000526020526040600020549180611cb7575b84837f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602073ffffffffffffffffffffffffffffffffffffffff886040519485521692a3602060405160018152f35b8083019280841115611d4157505050602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928185166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef83526040600020866000528352806040600020559250611c68565b6040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015293909316602484015260448301526064820152608490fd5b73ffffffffffffffffffffffffffffffffffffffff837ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576020611e196129f4565b604051908152f35b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57602060ff7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57600435611eb9612388565b611ec16136a3565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034e57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611f7457005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080606081016109b1565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461031f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576105086120b4612365565b6120bc612388565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee916120e66136a3565b92604435938473ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff851603612127575b50506134c5565b6121329184846132e7565b8584612120565b3461031f5761050861214a366123dc565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6121776136a3565b906128aa565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f5760207f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf054604051908152f35b3461031f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f57610508612212612365565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee61223f6136a3565b90612785565b3461031f5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576111186111047f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a816126c3565b3461031f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031f576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361031f576118766020916125c1565b919082519283825260005b8481106123505750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201612311565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031f57565b9181601f8401121561031f5782359167ffffffffffffffff831161031f576020808501948460051b01011161031f57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261031f5760043567ffffffffffffffff811161031f5781612425916004016123ab565b929092916024359067ffffffffffffffff821161031f57612448916004016123ab565b9091565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261031f5760043567ffffffffffffffff811161031f5781612495916004016123ab565b9290929160243567ffffffffffffffff811161031f57816124b8916004016123ab565b929092916044359067ffffffffffffffff821161031f57612448916004016123ab565b9181601f8401121561031f5782359167ffffffffffffffff831161031f576020838186019501011161031f57565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156125615773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761074f57604052565b67ffffffffffffffff811161074f5760051b60200190565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff00000000000000000000000000000000000000000000000000000000811461266a577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612664576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b90600182811c921680156126b9575b602083101461268a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f169161267f565b90604051918260008254926126d784612670565b808452936001811690811561274557506001146126fe575b506126fc92500383612568565b565b90506000929192526020600020906000915b8183106127295750509060206126fc92820101386126ef565b6020919350806001915483858901015201910190918492612710565b602093506126fc9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386126ef565b929173ffffffffffffffffffffffffffffffffffffffff169283156128065773ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260016020938383166000520183526040600020866000528352846040600020556040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff827ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b919081101561285a5760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361031f5790565b9392948086036103245785156129ec5760009560005b8181106128e157505050505050816128d6575050565b600201908154039055565b6128ef610d2082848861284a565b6128fa82858961284a565b3573ffffffffffffffffffffffffffffffffffffffff821691818773ffffffffffffffffffffffffffffffffffffffff811685036129da575b509050612972575b600192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020600093604051908152a3016128c0565b98604060008381528a60205220548a810390808210156129a45750600083815260208b9052604090205589019861293b565b8b90847fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6129e4928c6132e7565b388187612933565b505050505050565b612a1d7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a816126c3565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a08152612a9560c082612568565b51902090565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff6040600020541615612af55750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b82612bab575b50907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6000946040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612c32575073ffffffffffffffffffffffffffffffffffffffff8316600090815260208390526040902055600201805483900390557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612b63565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b95949093929192858103610324578015612f215773ffffffffffffffffffffffffffffffffffffffff8416600052866020526040600020549160009660009260005b818110612d1a575050505050505073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821603612d08575b50505050565b612d11936132e7565b38808080612d02565b73ffffffffffffffffffffffffffffffffffffffff612d3d610d2083858b61284a565b168015612edd57612d4f82858761284a565b3580612e19575b906020917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef73ffffffffffffffffffffffffffffffffffffffff8c16938492604051908152a38a151580612e0f575b612db3575b50600101612cc0565b8a87039087821015612dd957600090815260208d90526040902090860190556001612daa565b878c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50858b1415612da5565b9a8b810190811115612eb3579a8c73ffffffffffffffffffffffffffffffffffffffff8b16838114612e655750906040602093926000908482528552208181540190555b909150612d56565b90508882989211612e7d575090866020920196612e5d565b8888917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7fdedd83410000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff897f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50505050505050565b805182101561285a5760209160051b010190565b909182519080518203610324578115612d025760009360005b838110612fb2575050505081612f6b575050565b6002018054918083019280841115612f8257505055565b7f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff612fd18284612f2a565b51168015611b2b57612fe38285612f2a565b5180613021575b9060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060019594604051908152a301612f57565b969190878301928311156130645773ffffffffffffffffffffffffffffffffffffffff811660009081526020889052604090208054890190559196909190612fea565b7f5542ae7c0000000000000000000000000000000000000000000000000000000060005260046000fd5b92939490918185036103245784156129ec5773ffffffffffffffffffffffffffffffffffffffff8316600052836020526040600020549560009260009660005b81811061318057505050505080151580613176575b6130ef575b5050505050565b808503948086101561312c57505073ffffffffffffffffffffffffffffffffffffffff1660005260205260406000209101905538808080806130e8565b73ffffffffffffffffffffffffffffffffffffffff837fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50838114156130e3565b73ffffffffffffffffffffffffffffffffffffffff6131a3610d2083858961284a565b1680156132a3576131b582858761284a565b3580613209575b90600192916040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff8c1692a3016130ce565b9687810190811115612eb3579673ffffffffffffffffffffffffffffffffffffffff891682811461325657509060019291604060008381528c602052208181540190555b909192506131bc565b8c829c921161326d5750908a60019392019a61324d565b8c8c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff887f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b92909173ffffffffffffffffffffffffffffffffffffffff8116938415613481576001019073ffffffffffffffffffffffffffffffffffffffff841660005281602052604060002085600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84141580613478575b6133b4575b50505090602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926040519485521692a3565b808403938085101561341d5750505073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260209282861660005283526040600020866000528352806040600020559261336c565b6040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015293909316602484015260448301526064820152608490fd5b50801515613367565b73ffffffffffffffffffffffffffffffffffffffff847ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b929173ffffffffffffffffffffffffffffffffffffffff169283156135d6578261352f575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff8216600052806020526040600020548381039080821015612c3257508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9716036135af575b50509250506134ea565b838316600052818552604060002055866000528352604060002085815401905538806135a5565b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b67ffffffffffffffff811161074f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926136608261361a565b9161366e6040519384612568565b82948184528183011161031f578281602093846000960137010152565b9081602091031261031f5751801515810361031f5790565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156137a85732331480156137ad575b6137a8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c9080331490811561372e575b5061372b57503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa908115610c1e57600091613789575b5038613721565b6137a2915060203d602011610eae57610ea08183612568565b38613782565b503390565b50601836106136ea565b61382673ffffffffffffffffffffffffffffffffffffffff9294958360209516968460405197889687967f4fc358590000000000000000000000000000000000000000000000000000000088521660048701521660248501526044840152608060648401526084830190612306565b03816000865af1908115610c1e576000916138b6575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc35859000000000000000000000000000000000000000000000000000000009116036138895750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d602011613930575b816138cf60209383612568565b8101031261392c5751907fffffffff000000000000000000000000000000000000000000000000000000008216820361392957507fffffffff0000000000000000000000000000000000000000000000000000000061383c565b80fd5b5080fd5b3d91506138c256fea2646970667358221220fe4e70044e588d96a7172d6571a03b2ddf9c6008383e09c35cc4d3ca8cf3282b64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
