{
  "_format": "hh-sol-artifact-1",
  "contractName": "Png",
  "sourceName": "contracts/pangolin-token/Png.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint96",
          "name": "cap_",
          "type": "uint96"
        },
        {
          "internalType": "uint96",
          "name": "preMint",
          "type": "uint96"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "fromDelegate",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "toDelegate",
          "type": "address"
        }
      ],
      "name": "DelegateChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegate",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "previousBalance",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newBalance",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "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": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "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": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "pos",
          "type": "uint32"
        }
      ],
      "name": "checkpoints",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "fromBlock",
              "type": "uint32"
            },
            {
              "internalType": "uint224",
              "name": "votes",
              "type": "uint224"
            }
          ],
          "internalType": "struct ERC20Votes.Checkpoint",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "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": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "nonce",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "delegateBySig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "delegates",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getCurrentVotes",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "getPriorVotes",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "",
          "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": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "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": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "numCheckpoints",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "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": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "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": "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": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "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": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x6101606040523480156200001257600080fd5b50604051620038df380380620038df833981016040819052620000359162000936565b6040805180820190915260018152603160f81b6020820152829081908184600362000061838262000a54565b50600462000070828262000a54565b5050825160208085019190912083518483012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c0019052805194019390932091935091906080523060c052610120525050506001600160601b038087166101405262000123925033915085166200013a565b6200013060003362000155565b5050505062000b6b565b6200015182826200019860201b62000f0e1760201c565b5050565b6200016c82826200025860201b62000fd31760201c565b6000828152600b602090815260409091206200019391839062001075620002fc821b17901c565b505050565b620001af82826200031c60201b6200108a1760201c565b610140516001600160e01b0316620001cc620003e960201b60201c565b1115620002395760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b60648201526084015b60405180910390fd5b62000252600962001151620003ef60201b1783620003fd565b50505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1662000151576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000313836001600160a01b0384166200058f565b90505b92915050565b6001600160a01b038216620003745760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000230565b806002600082825462000388919062000b36565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36200015160008383620005e1565b60025490565b600062000313828462000b36565b825460009081908181156200045d576200042c876200041e60018562000b51565b600091825260209091200190565b60408051808201909152905463ffffffff8116825264010000000090046001600160e01b0316602082015262000472565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506200049084868860201c565b9250600082118015620004a95750805163ffffffff1643145b156200050057620004c583620005f960201b6200115d1760201c565b620004d7886200041e60018662000b51565b80546001600160e01b03929092166401000000000263ffffffff90921691909117905562000585565b86604051806040016040528062000522436200066860201b620011e01760201c565b63ffffffff1681526020016200054386620005f960201b6200115d1760201c565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000818152600183016020526040812054620005d85750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000316565b50600062000316565b62000193838383620006cf60201b6200125c1760201c565b60006001600160e01b03821115620006645760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840162000230565b5090565b600063ffffffff821115620006645760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840162000230565b620006e78383836200019360201b620007d21760201c565b6001600160a01b038381166000908152600760205260408082205485841683529120546200019392918216911683818314801590620007265750600081115b1562000193576001600160a01b03831615620007b3576001600160a01b0383166000908152600860209081526040822082916200077091906200083e901b6200128e1785620003fd565b91509150846001600160a01b0316600080516020620038bf8339815191528383604051620007a8929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161562000193576001600160a01b038216600090815260086020908152604082208291620007f79190620003ef901b620011511785620003fd565b91509150836001600160a01b0316600080516020620038bf83398151915283836040516200082f929190918252602082015260400190565b60405180910390a25050505050565b600062000313828462000b51565b80516001600160601b03811681146200086457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200089157600080fd5b81516001600160401b0380821115620008ae57620008ae62000869565b604051601f8301601f19908116603f01168101908282118183101715620008d957620008d962000869565b81604052838152602092508683858801011115620008f657600080fd5b600091505b838210156200091a5785820183015181830184015290820190620008fb565b838211156200092c5760008385830101525b9695505050505050565b600080600080608085870312156200094d57600080fd5b62000958856200084c565b935062000968602086016200084c565b60408601519093506001600160401b03808211156200098657600080fd5b62000994888389016200087f565b93506060870151915080821115620009ab57600080fd5b50620009ba878288016200087f565b91505092959194509250565b600181811c90821680620009db57607f821691505b602082108103620009fc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019357600081815260208120601f850160051c8101602086101562000a2b5750805b601f850160051c820191505b8181101562000a4c5782815560010162000a37565b505050505050565b81516001600160401b0381111562000a705762000a7062000869565b62000a888162000a818454620009c6565b8462000a02565b602080601f83116001811462000ac0576000841562000aa75750858301515b600019600386901b1c1916600185901b17855562000a4c565b600085815260208120601f198616915b8281101562000af15788860151825594840194600190910190840162000ad0565b508582101562000b105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000b4c5762000b4c62000b20565b500190565b60008282101562000b665762000b6662000b20565b500390565b60805160a05160c05160e051610100516101205161014051612cf262000bcd600039600081816103580152610f1a015260006117be0152600061180d015260006117e8015260006117410152600061176b015260006117950152612cf26000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063782d6fe111610160578063a457c2d7116100d8578063d505accf1161008c578063d547741f11610071578063d547741f146105fa578063dd62ed3e1461060d578063f1127ed81461064657600080fd5b8063d505accf146105c0578063d5391393146105d357600080fd5b8063b4b5ea57116100bd578063b4b5ea5714610587578063c3cda5201461059a578063ca15c873146105ad57600080fd5b8063a457c2d714610561578063a9059cbb1461057457600080fd5b80639010d07c1161012f57806395d89b411161011457806395d89b411461053e5780639ab24eb014610546578063a217fddf1461055957600080fd5b80639010d07c146104f257806391d148541461050557600080fd5b8063782d6fe11461048957806379cc6790146104b95780637ecebe00146104cc5780638e539e8c146104df57600080fd5b80633644e5151161020e57806342966c68116101c25780635c19a95c116101a75780635c19a95c146104255780636fcfff451461043857806370a082311461046057600080fd5b806342966c68146103ce578063587cde1e146103e157600080fd5b806339509351116101f357806339509351146103955780633a46b1a8146103a857806340c10f19146103bb57600080fd5b80633644e5151461037a57806336568abe1461038257600080fd5b806323b872dd116102655780632f2ff15d1161024a5780632f2ff15d1461032f578063313ce56714610344578063355274ea1461035357600080fd5b806323b872dd146102f9578063248a9ca31461030c57600080fd5b806301ffc9a71461029757806306fdde03146102bf578063095ea7b3146102d457806318160ddd146102e7575b600080fd5b6102aa6102a536600461281a565b610683565b60405190151581526020015b60405180910390f35b6102c76106df565b6040516102b69190612888565b6102aa6102e23660046128d7565b610771565b6002545b6040519081526020016102b6565b6102aa610307366004612901565b610789565b6102eb61031a36600461293d565b6000908152600a602052604090206001015490565b61034261033d366004612956565b6107ad565b005b604051601281526020016102b6565b6102eb7f000000000000000000000000000000000000000000000000000000000000000081565b6102eb6107d7565b610342610390366004612956565b6107e6565b6102aa6103a33660046128d7565b610877565b6102eb6103b63660046128d7565b6108b6565b6103426103c93660046128d7565b610930565b6103426103dc36600461293d565b610964565b61040d6103ef366004612982565b6001600160a01b039081166000908152600760205260409020541690565b6040516001600160a01b0390911681526020016102b6565b610342610433366004612982565b610971565b61044b610446366004612982565b61097b565b60405163ffffffff90911681526020016102b6565b6102eb61046e366004612982565b6001600160a01b031660009081526020819052604090205490565b61049c6104973660046128d7565b61099d565b6040516bffffffffffffffffffffffff90911681526020016102b6565b6103426104c73660046128d7565b6109b1565b6102eb6104da366004612982565b6109c6565b6102eb6104ed36600461293d565b6109e4565b61040d61050036600461299d565b610a40565b6102aa610513366004612956565b6000918252600a602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102c7610a58565b6102eb610554366004612982565b610a67565b6102eb600081565b6102aa61056f3660046128d7565b610aee565b6102aa6105823660046128d7565b610b98565b61049c610595366004612982565b610ba6565b6103426105a83660046129d0565b610bb4565b6102eb6105bb36600461293d565b610cea565b6103426105ce366004612a28565b610d01565b6102eb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610342610608366004612956565b610e65565b6102eb61061b366004612a92565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610659610654366004612abc565b610e8a565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016102b6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106d957506106d98261129a565b92915050565b6060600380546106ee90612afc565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90612afc565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b60003361077f818585611331565b5060019392505050565b600033610797858285611489565b6107a2858585611515565b506001949350505050565b6000828152600a60205260409020600101546107c881611708565b6107d28383611712565b505050565b60006107e1611734565b905090565b6001600160a01b03811633146108695760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610873828261185b565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061077f90829086906108b1908790612b46565b611331565b60004382106109075760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610860565b6001600160a01b0383166000908152600860205260409020610929908361187d565b9392505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661095a81611708565b6107d28383611974565b61096e338261197e565b50565b61096e3382611988565b6001600160a01b0381166000908152600860205260408120546106d9906111e0565b60006109296109ac84846108b6565b611a19565b6109bc823383611489565b610873828261197e565b6001600160a01b0381166000908152600560205260408120546106d9565b6000438210610a355760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610860565b6106d960098361187d565b6000828152600b602052604081206109299083611a9d565b6060600480546106ee90612afc565b6001600160a01b0381166000908152600860205260408120548015610adb576001600160a01b0383166000908152600860205260409020610aa9600183612b5e565b81548110610ab957610ab9612b75565b60009182526020909120015464010000000090046001600160e01b0316610ade565b60005b6001600160e01b03169392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610b8b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610860565b6107a28286868403611331565b60003361077f818585611515565b60006106d96109ac83610a67565b83421115610c045760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610860565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610c7e90610c769060a00160405160208183030381529060405280519060200120611aa9565b858585611b12565b9050610c8981611b3a565b8614610cd75760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610860565b610ce18188611988565b50505050505050565b6000818152600b602052604081206106d990611b62565b83421115610d515760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610860565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610d808c611b3a565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ddb82611aa9565b90506000610deb82878787611b12565b9050896001600160a01b0316816001600160a01b031614610e4e5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610860565b610e598a8a8a611331565b50505050505050505050565b6000828152600a6020526040902060010154610e8081611708565b6107d2838361185b565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff8416908110610ece57610ece612b75565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610f18828261108a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160e01b0316610f4b60025490565b1115610fbf5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610860565b610fcd600961115183611b6c565b50505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff16610873576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110313390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610929836001600160a01b038416611cc0565b6001600160a01b0382166110e05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610860565b80600260008282546110f29190612b46565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361087360008383611d0f565b60006109298284612b46565b60006001600160e01b038211156111dc5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610860565b5090565b600063ffffffff8211156111dc5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b038381166000908152600760205260408082205485841683529120546107d292918216911683611d1a565b60006109298284612b5e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106d957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106d9565b6001600160a01b0383166113ac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0382166114285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610fcd57818110156115085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610860565b610fcd8484848403611331565b6001600160a01b0383166115915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b03821661160d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0383166000908152602081905260409020548181101561169c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610fcd848484611d0f565b61096e8133611e57565b61171c8282610fd3565b6000828152600b602052604090206107d29082611075565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561178d57507f000000000000000000000000000000000000000000000000000000000000000046145b156117b757507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6118658282611ecc565b6000828152600b602052604090206107d29082611f4f565b8154600090818160058111156118d757600061189884611f64565b6118a29085612b5e565b600088815260209020909150869082015463ffffffff1611156118c7578091506118d5565b6118d2816001612b46565b92505b505b808210156119245760006118eb838361204c565b600088815260209020909150869082015463ffffffff1611156119105780915061191e565b61191b816001612b46565b92505b506118d7565b801561195e5761194786611939600184612b5e565b600091825260209091200190565b5464010000000090046001600160e01b0316611961565b60005b6001600160e01b03169695505050505050565b6108738282610f0e565b6108738282612067565b6001600160a01b038281166000818152600760208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610fcd828483611d1a565b60006bffffffffffffffffffffffff8211156111dc5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610860565b6000610929838361207f565b60006106d9611ab6611734565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611b23878787876120a9565b91509150611b308161216d565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b60006106d9825490565b82546000908190818115611bb957611b8987611939600185612b5e565b60408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152611bce565b60408051808201909152600080825260208201525b905080602001516001600160e01b03169350611bee84868863ffffffff16565b9250600082118015611c065750805163ffffffff1643145b15611c4b57611c148361115d565b611c2388611939600186612b5e565b80546001600160e01b03929092166401000000000263ffffffff909216919091179055611cb6565b866040518060400160405280611c60436111e0565b63ffffffff168152602001611c748661115d565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000818152600183016020526040812054611d07575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106d9565b5060006106d9565b6107d283838361125c565b816001600160a01b0316836001600160a01b031614158015611d3c5750600081115b156107d2576001600160a01b03831615611dca576001600160a01b03831660009081526008602052604081208190611d779061128e85611b6c565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611dbf929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156107d2576001600160a01b03821660009081526008602052604081208190611e009061115185611b6c565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e48929190918252602082015260400190565b60405180910390a25050505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1661087357611e8a816122d2565b611e958360206122e4565b604051602001611ea6929190612b8b565b60408051601f198184030181529082905262461bcd60e51b825261086091600401612888565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1615610873576000828152600a602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610929836001600160a01b03841661250d565b600081600003611f7657506000919050565b60006001611f8384612600565b901c6001901b90506001818481611f9c57611f9c612c0c565b048201901c90506001818481611fb457611fb4612c0c565b048201901c90506001818481611fcc57611fcc612c0c565b048201901c90506001818481611fe457611fe4612c0c565b048201901c90506001818481611ffc57611ffc612c0c565b048201901c9050600181848161201457612014612c0c565b048201901c9050600181848161202c5761202c612c0c565b048201901c90506109298182858161204657612046612c0c565b04612694565b600061205b6002848418612c22565b61092990848416612b46565b61207182826126aa565b610fcd600961128e83611b6c565b600082600001828154811061209657612096612b75565b9060005260206000200154905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156120e05750600090506003612164565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612134573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661215d57600060019250925050612164565b9150600090505b94509492505050565b600081600481111561218157612181612c44565b036121895750565b600181600481111561219d5761219d612c44565b036121ea5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610860565b60028160048111156121fe576121fe612c44565b0361224b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610860565b600381600481111561225f5761225f612c44565b0361096e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610860565b60606106d96001600160a01b03831660145b606060006122f3836002612c5a565b6122fe906002612b46565b67ffffffffffffffff81111561231657612316612c79565b6040519080825280601f01601f191660200182016040528015612340576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061237757612377612b75565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106123da576123da612b75565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612416846002612c5a565b612421906001612b46565b90505b60018111156124be577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061246257612462612b75565b1a60f81b82828151811061247857612478612b75565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936124b781612c8f565b9050612424565b5083156109295760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610860565b600081815260018301602052604081205480156125f6576000612531600183612b5e565b855490915060009061254590600190612b5e565b90508181146125aa57600086600001828154811061256557612565612b75565b906000526020600020015490508087600001848154811061258857612588612b75565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806125bb576125bb612ca6565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106d9565b60009150506106d9565b600080608083901c1561261557608092831c92015b604083901c1561262757604092831c92015b602083901c1561263957602092831c92015b601083901c1561264b57601092831c92015b600883901c1561265d57600892831c92015b600483901c1561266f57600492831c92015b600283901c1561268157600292831c92015b600183901c156106d95760010192915050565b60008183106126a35781610929565b5090919050565b6001600160a01b0382166127265760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b038216600090815260208190526040902054818110156127b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107d283600084611d0f565b60006020828403121561282c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461092957600080fd5b60005b8381101561287757818101518382015260200161285f565b83811115610fcd5750506000910152565b60208152600082518060208401526128a781604085016020870161285c565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146128d257600080fd5b919050565b600080604083850312156128ea57600080fd5b6128f3836128bb565b946020939093013593505050565b60008060006060848603121561291657600080fd5b61291f846128bb565b925061292d602085016128bb565b9150604084013590509250925092565b60006020828403121561294f57600080fd5b5035919050565b6000806040838503121561296957600080fd5b82359150612979602084016128bb565b90509250929050565b60006020828403121561299457600080fd5b610929826128bb565b600080604083850312156129b057600080fd5b50508035926020909101359150565b803560ff811681146128d257600080fd5b60008060008060008060c087890312156129e957600080fd5b6129f2876128bb565b95506020870135945060408701359350612a0e606088016129bf565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612a4357600080fd5b612a4c886128bb565b9650612a5a602089016128bb565b95506040880135945060608801359350612a76608089016129bf565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612aa557600080fd5b612aae836128bb565b9150612979602084016128bb565b60008060408385031215612acf57600080fd5b612ad8836128bb565b9150602083013563ffffffff81168114612af157600080fd5b809150509250929050565b600181811c90821680612b1057607f821691505b602082108103611b5c57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612b5957612b59612b30565b500190565b600082821015612b7057612b70612b30565b500390565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612bc381601785016020880161285c565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612c0081602884016020880161285c565b01602801949350505050565b634e487b7160e01b600052601260045260246000fd5b600082612c3f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6000816000190483118215151615612c7457612c74612b30565b500290565b634e487b7160e01b600052604160045260246000fd5b600081612c9e57612c9e612b30565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209dfe1a11165bab5de5b5c2c50c39075b0fd24c82d6b3a53a0293534536e3649664736f6c634300080f0033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102925760003560e01c8063782d6fe111610160578063a457c2d7116100d8578063d505accf1161008c578063d547741f11610071578063d547741f146105fa578063dd62ed3e1461060d578063f1127ed81461064657600080fd5b8063d505accf146105c0578063d5391393146105d357600080fd5b8063b4b5ea57116100bd578063b4b5ea5714610587578063c3cda5201461059a578063ca15c873146105ad57600080fd5b8063a457c2d714610561578063a9059cbb1461057457600080fd5b80639010d07c1161012f57806395d89b411161011457806395d89b411461053e5780639ab24eb014610546578063a217fddf1461055957600080fd5b80639010d07c146104f257806391d148541461050557600080fd5b8063782d6fe11461048957806379cc6790146104b95780637ecebe00146104cc5780638e539e8c146104df57600080fd5b80633644e5151161020e57806342966c68116101c25780635c19a95c116101a75780635c19a95c146104255780636fcfff451461043857806370a082311461046057600080fd5b806342966c68146103ce578063587cde1e146103e157600080fd5b806339509351116101f357806339509351146103955780633a46b1a8146103a857806340c10f19146103bb57600080fd5b80633644e5151461037a57806336568abe1461038257600080fd5b806323b872dd116102655780632f2ff15d1161024a5780632f2ff15d1461032f578063313ce56714610344578063355274ea1461035357600080fd5b806323b872dd146102f9578063248a9ca31461030c57600080fd5b806301ffc9a71461029757806306fdde03146102bf578063095ea7b3146102d457806318160ddd146102e7575b600080fd5b6102aa6102a536600461281a565b610683565b60405190151581526020015b60405180910390f35b6102c76106df565b6040516102b69190612888565b6102aa6102e23660046128d7565b610771565b6002545b6040519081526020016102b6565b6102aa610307366004612901565b610789565b6102eb61031a36600461293d565b6000908152600a602052604090206001015490565b61034261033d366004612956565b6107ad565b005b604051601281526020016102b6565b6102eb7f000000000000000000000000000000000000000000000000000000000000000081565b6102eb6107d7565b610342610390366004612956565b6107e6565b6102aa6103a33660046128d7565b610877565b6102eb6103b63660046128d7565b6108b6565b6103426103c93660046128d7565b610930565b6103426103dc36600461293d565b610964565b61040d6103ef366004612982565b6001600160a01b039081166000908152600760205260409020541690565b6040516001600160a01b0390911681526020016102b6565b610342610433366004612982565b610971565b61044b610446366004612982565b61097b565b60405163ffffffff90911681526020016102b6565b6102eb61046e366004612982565b6001600160a01b031660009081526020819052604090205490565b61049c6104973660046128d7565b61099d565b6040516bffffffffffffffffffffffff90911681526020016102b6565b6103426104c73660046128d7565b6109b1565b6102eb6104da366004612982565b6109c6565b6102eb6104ed36600461293d565b6109e4565b61040d61050036600461299d565b610a40565b6102aa610513366004612956565b6000918252600a602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6102c7610a58565b6102eb610554366004612982565b610a67565b6102eb600081565b6102aa61056f3660046128d7565b610aee565b6102aa6105823660046128d7565b610b98565b61049c610595366004612982565b610ba6565b6103426105a83660046129d0565b610bb4565b6102eb6105bb36600461293d565b610cea565b6103426105ce366004612a28565b610d01565b6102eb7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610342610608366004612956565b610e65565b6102eb61061b366004612a92565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610659610654366004612abc565b610e8a565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016102b6565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806106d957506106d98261129a565b92915050565b6060600380546106ee90612afc565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90612afc565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b60003361077f818585611331565b5060019392505050565b600033610797858285611489565b6107a2858585611515565b506001949350505050565b6000828152600a60205260409020600101546107c881611708565b6107d28383611712565b505050565b60006107e1611734565b905090565b6001600160a01b03811633146108695760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b610873828261185b565b5050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061077f90829086906108b1908790612b46565b611331565b60004382106109075760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610860565b6001600160a01b0383166000908152600860205260409020610929908361187d565b9392505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661095a81611708565b6107d28383611974565b61096e338261197e565b50565b61096e3382611988565b6001600160a01b0381166000908152600860205260408120546106d9906111e0565b60006109296109ac84846108b6565b611a19565b6109bc823383611489565b610873828261197e565b6001600160a01b0381166000908152600560205260408120546106d9565b6000438210610a355760405162461bcd60e51b815260206004820152601f60248201527f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e6564006044820152606401610860565b6106d960098361187d565b6000828152600b602052604081206109299083611a9d565b6060600480546106ee90612afc565b6001600160a01b0381166000908152600860205260408120548015610adb576001600160a01b0383166000908152600860205260409020610aa9600183612b5e565b81548110610ab957610ab9612b75565b60009182526020909120015464010000000090046001600160e01b0316610ade565b60005b6001600160e01b03169392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610b8b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610860565b6107a28286868403611331565b60003361077f818585611515565b60006106d96109ac83610a67565b83421115610c045760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610860565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610c7e90610c769060a00160405160208183030381529060405280519060200120611aa9565b858585611b12565b9050610c8981611b3a565b8614610cd75760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610860565b610ce18188611988565b50505050505050565b6000818152600b602052604081206106d990611b62565b83421115610d515760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610860565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610d808c611b3a565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610ddb82611aa9565b90506000610deb82878787611b12565b9050896001600160a01b0316816001600160a01b031614610e4e5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610860565b610e598a8a8a611331565b50505050505050505050565b6000828152600a6020526040902060010154610e8081611708565b6107d2838361185b565b60408051808201909152600080825260208201526001600160a01b0383166000908152600860205260409020805463ffffffff8416908110610ece57610ece612b75565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b610f18828261108a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160e01b0316610f4b60025490565b1115610fbf5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201527f766572666c6f77696e6720766f746573000000000000000000000000000000006064820152608401610860565b610fcd600961115183611b6c565b50505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff16610873576000828152600a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556110313390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610929836001600160a01b038416611cc0565b6001600160a01b0382166110e05760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610860565b80600260008282546110f29190612b46565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361087360008383611d0f565b60006109298284612b46565b60006001600160e01b038211156111dc5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203260448201527f32342062697473000000000000000000000000000000000000000000000000006064820152608401610860565b5090565b600063ffffffff8211156111dc5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201527f32206269747300000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b038381166000908152600760205260408082205485841683529120546107d292918216911683611d1a565b60006109298284612b5e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106d957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146106d9565b6001600160a01b0383166113ac5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0382166114285760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610fcd57818110156115085760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610860565b610fcd8484848403611331565b6001600160a01b0383166115915760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b03821661160d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0383166000908152602081905260409020548181101561169c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610fcd848484611d0f565b61096e8133611e57565b61171c8282610fd3565b6000828152600b602052604090206107d29082611075565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561178d57507f000000000000000000000000000000000000000000000000000000000000000046145b156117b757507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6118658282611ecc565b6000828152600b602052604090206107d29082611f4f565b8154600090818160058111156118d757600061189884611f64565b6118a29085612b5e565b600088815260209020909150869082015463ffffffff1611156118c7578091506118d5565b6118d2816001612b46565b92505b505b808210156119245760006118eb838361204c565b600088815260209020909150869082015463ffffffff1611156119105780915061191e565b61191b816001612b46565b92505b506118d7565b801561195e5761194786611939600184612b5e565b600091825260209091200190565b5464010000000090046001600160e01b0316611961565b60005b6001600160e01b03169695505050505050565b6108738282610f0e565b6108738282612067565b6001600160a01b038281166000818152600760208181526040808420805485845282862054949093528787167fffffffffffffffffffffffff00000000000000000000000000000000000000008416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610fcd828483611d1a565b60006bffffffffffffffffffffffff8211156111dc5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610860565b6000610929838361207f565b60006106d9611ab6611734565b836040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000806000611b23878787876120a9565b91509150611b308161216d565b5095945050505050565b6001600160a01b03811660009081526005602052604090208054600181018255905b50919050565b60006106d9825490565b82546000908190818115611bb957611b8987611939600185612b5e565b60408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152611bce565b60408051808201909152600080825260208201525b905080602001516001600160e01b03169350611bee84868863ffffffff16565b9250600082118015611c065750805163ffffffff1643145b15611c4b57611c148361115d565b611c2388611939600186612b5e565b80546001600160e01b03929092166401000000000263ffffffff909216919091179055611cb6565b866040518060400160405280611c60436111e0565b63ffffffff168152602001611c748661115d565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6000818152600183016020526040812054611d07575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106d9565b5060006106d9565b6107d283838361125c565b816001600160a01b0316836001600160a01b031614158015611d3c5750600081115b156107d2576001600160a01b03831615611dca576001600160a01b03831660009081526008602052604081208190611d779061128e85611b6c565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611dbf929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156107d2576001600160a01b03821660009081526008602052604081208190611e009061115185611b6c565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611e48929190918252602082015260400190565b60405180910390a25050505050565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1661087357611e8a816122d2565b611e958360206122e4565b604051602001611ea6929190612b8b565b60408051601f198184030181529082905262461bcd60e51b825261086091600401612888565b6000828152600a602090815260408083206001600160a01b038516845290915290205460ff1615610873576000828152600a602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610929836001600160a01b03841661250d565b600081600003611f7657506000919050565b60006001611f8384612600565b901c6001901b90506001818481611f9c57611f9c612c0c565b048201901c90506001818481611fb457611fb4612c0c565b048201901c90506001818481611fcc57611fcc612c0c565b048201901c90506001818481611fe457611fe4612c0c565b048201901c90506001818481611ffc57611ffc612c0c565b048201901c9050600181848161201457612014612c0c565b048201901c9050600181848161202c5761202c612c0c565b048201901c90506109298182858161204657612046612c0c565b04612694565b600061205b6002848418612c22565b61092990848416612b46565b61207182826126aa565b610fcd600961128e83611b6c565b600082600001828154811061209657612096612b75565b9060005260206000200154905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156120e05750600090506003612164565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612134573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661215d57600060019250925050612164565b9150600090505b94509492505050565b600081600481111561218157612181612c44565b036121895750565b600181600481111561219d5761219d612c44565b036121ea5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610860565b60028160048111156121fe576121fe612c44565b0361224b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610860565b600381600481111561225f5761225f612c44565b0361096e5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152608401610860565b60606106d96001600160a01b03831660145b606060006122f3836002612c5a565b6122fe906002612b46565b67ffffffffffffffff81111561231657612316612c79565b6040519080825280601f01601f191660200182016040528015612340576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061237757612377612b75565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106123da576123da612b75565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000612416846002612c5a565b612421906001612b46565b90505b60018111156124be577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061246257612462612b75565b1a60f81b82828151811061247857612478612b75565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936124b781612c8f565b9050612424565b5083156109295760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610860565b600081815260018301602052604081205480156125f6576000612531600183612b5e565b855490915060009061254590600190612b5e565b90508181146125aa57600086600001828154811061256557612565612b75565b906000526020600020015490508087600001848154811061258857612588612b75565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806125bb576125bb612ca6565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106d9565b60009150506106d9565b600080608083901c1561261557608092831c92015b604083901c1561262757604092831c92015b602083901c1561263957602092831c92015b601083901c1561264b57601092831c92015b600883901c1561265d57600892831c92015b600483901c1561266f57600492831c92015b600283901c1561268157600292831c92015b600183901c156106d95760010192915050565b60008183106126a35781610929565b5090919050565b6001600160a01b0382166127265760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b038216600090815260208190526040902054818110156127b55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610860565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36107d283600084611d0f565b60006020828403121561282c57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461092957600080fd5b60005b8381101561287757818101518382015260200161285f565b83811115610fcd5750506000910152565b60208152600082518060208401526128a781604085016020870161285c565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146128d257600080fd5b919050565b600080604083850312156128ea57600080fd5b6128f3836128bb565b946020939093013593505050565b60008060006060848603121561291657600080fd5b61291f846128bb565b925061292d602085016128bb565b9150604084013590509250925092565b60006020828403121561294f57600080fd5b5035919050565b6000806040838503121561296957600080fd5b82359150612979602084016128bb565b90509250929050565b60006020828403121561299457600080fd5b610929826128bb565b600080604083850312156129b057600080fd5b50508035926020909101359150565b803560ff811681146128d257600080fd5b60008060008060008060c087890312156129e957600080fd5b6129f2876128bb565b95506020870135945060408701359350612a0e606088016129bf565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215612a4357600080fd5b612a4c886128bb565b9650612a5a602089016128bb565b95506040880135945060608801359350612a76608089016129bf565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215612aa557600080fd5b612aae836128bb565b9150612979602084016128bb565b60008060408385031215612acf57600080fd5b612ad8836128bb565b9150602083013563ffffffff81168114612af157600080fd5b809150509250929050565b600181811c90821680612b1057607f821691505b602082108103611b5c57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612b5957612b59612b30565b500190565b600082821015612b7057612b70612b30565b500390565b634e487b7160e01b600052603260045260246000fd5b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612bc381601785016020880161285c565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612c0081602884016020880161285c565b01602801949350505050565b634e487b7160e01b600052601260045260246000fd5b600082612c3f57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b6000816000190483118215151615612c7457612c74612b30565b500290565b634e487b7160e01b600052604160045260246000fd5b600081612c9e57612c9e612b30565b506000190190565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209dfe1a11165bab5de5b5c2c50c39075b0fd24c82d6b3a53a0293534536e3649664736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
