{
  "_format": "hh-sol-artifact-1",
  "contractName": "VOT3",
  "sourceName": "contracts/VOT3.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CheckpointUnorderedInsertion",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "increasedSupply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "cap",
          "type": "uint256"
        }
      ],
      "name": "ERC20ExceededSafeSupply",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "approver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidApprover",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidReceiver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "ERC20InvalidSpender",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC2612ExpiredSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "signer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC2612InvalidSigner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        },
        {
          "internalType": "uint48",
          "name": "clock",
          "type": "uint48"
        }
      ],
      "name": "ERC5805FutureLookup",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC6372InconsistentClock",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "EnforcedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ExpectedPause",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "name": "InvalidAccountNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "bits",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "SafeCastOverflowedUintDowncast",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "expiry",
          "type": "uint256"
        }
      ],
      "name": "VotesExpiredSignature",
      "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": "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": "previousVotes",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotes",
          "type": "uint256"
        }
      ],
      "name": "DelegateVotesChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CLOCK_MODE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "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": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "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": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "b3tr",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "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": "uint48",
              "name": "_key",
              "type": "uint48"
            },
            {
              "internalType": "uint208",
              "name": "_value",
              "type": "uint208"
            }
          ],
          "internalType": "struct Checkpoints.Checkpoint208",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clock",
      "outputs": [
        {
          "internalType": "uint48",
          "name": "",
          "type": "uint48"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "convertToB3TR",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "convertToVOT3",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "convertedB3trOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "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": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getNavigatorLockedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastQuadraticVotingPower",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastTotalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "timepoint",
          "type": "uint256"
        }
      ],
      "name": "getPastVotes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "getQuadraticVotingPower",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "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": "_admin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_upgrader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_pauser",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_b3tr",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_navigatorRegistry",
          "type": "address"
        }
      ],
      "name": "initializeV2",
      "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": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "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": "value",
          "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": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "unlockedBalance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613a536200010460003960008181611c9501528181611cbe0152611e080152613a536000f3fe60806040526004361061022e5760003560e01c806301ffc9a71461023357806306fdde0314610268578063095ea7b31461028a578063114d621e146102aa57806318160ddd146102d857806323b872dd146102ed578063248a9ca31461030d57806329b6eca91461032d5780632f2ff15d1461034f578063313ce5671461036f5780633644e5151461038b57806336568abe146103a05780633a46b1a8146103c05780633f4ba83a146103e05780634bf5d7e9146103f55780634f1ef2861461040a57806352d1902d1461041d57806354fd4d5014610432578063582a486a1461045c578063587cde1e1461047e5780635c19a95c1461049e5780635c975abb146104be5780635e0fac2e146104d35780636fcfff45146104f357806370a08231146105285780637ecebe00146105485780638456cb591461056857806384b0196e1461057d5780638e539e8c146105a557806391d14854146105c557806391ddadf4146105e557806395d89b41146106115780639ab24eb0146106265780639ae05c3514610646578063a217fddf14610666578063a9059cbb1461067b578063ad3cb1cc1461069b578063b0385a12146106cc578063c3cda520146106ec578063c731790a1461070c578063d505accf1461072c578063d547741f1461074c578063dd62ed3e1461076c578063e23285a01461078c578063e63ab1e9146107ac578063f1127ed8146107ce578063f72c0d8b1461081a578063f8c8765e1461083c578063faad86761461085c575b600080fd5b34801561023f57600080fd5b5061025361024e3660046131f0565b61087c565b60405190151581526020015b60405180910390f35b34801561027457600080fd5b5061027d6108b3565b60405161025f919061326a565b34801561029657600080fd5b506102536102a5366004613299565b610954565b3480156102b657600080fd5b506102ca6102c5366004613299565b610967565b60405190815260200161025f565b3480156102e457600080fd5b506102ca610989565b3480156102f957600080fd5b506102536103083660046132c3565b61099e565b34801561031957600080fd5b506102ca6103283660046132ff565b6109b3565b34801561033957600080fd5b5061034d610348366004613318565b6109d3565b005b34801561035b57600080fd5b5061034d61036a366004613333565b610b14565b34801561037b57600080fd5b506040516012815260200161025f565b34801561039757600080fd5b506102ca610b36565b3480156103ac57600080fd5b5061034d6103bb366004613333565b610b45565b3480156103cc57600080fd5b506102ca6103db366004613299565b610b7d565b3480156103ec57600080fd5b5061034d610c00565b34801561040157600080fd5b5061027d610c23565b61034d610418366004613375565b610c9b565b34801561042957600080fd5b506102ca610cba565b34801561043e57600080fd5b506040805180820190915260018152601960f91b602082015261027d565b34801561046857600080fd5b50610471610cd7565b60405161025f9190613436565b34801561048a57600080fd5b50610471610499366004613318565b610cf2565b3480156104aa57600080fd5b5061034d6104b9366004613318565b610d21565b3480156104ca57600080fd5b50610253610d7b565b3480156104df57600080fd5b506102ca6104ee366004613318565b610d90565b3480156104ff57600080fd5b5061051361050e366004613318565b610e43565b60405163ffffffff909116815260200161025f565b34801561053457600080fd5b506102ca610543366004613318565b610e4e565b34801561055457600080fd5b506102ca610563366004613318565b610e79565b34801561057457600080fd5b5061034d610e84565b34801561058957600080fd5b50610592610ea4565b60405161025f979695949392919061344a565b3480156105b157600080fd5b506102ca6105c03660046132ff565b610f4d565b3480156105d157600080fd5b506102536105e0366004613333565b610fb9565b3480156105f157600080fd5b506105fa610fef565b60405165ffffffffffff909116815260200161025f565b34801561061d57600080fd5b5061027d610ff9565b34801561063257600080fd5b506102ca610641366004613318565b611016565b34801561065257600080fd5b5061034d6106613660046132ff565b611057565b34801561067257600080fd5b506102ca600081565b34801561068757600080fd5b50610253610696366004613299565b611204565b3480156106a757600080fd5b5061027d604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156106d857600080fd5b506102ca6106e7366004613318565b611210565b3480156106f857600080fd5b5061034d6107073660046134f1565b6112ac565b34801561071857600080fd5b506102ca610727366004613318565b611369565b34801561073857600080fd5b5061034d610747366004613549565b611396565b34801561075857600080fd5b5061034d610767366004613333565b6114b2565b34801561077857600080fd5b506102ca6107873660046135b3565b6114ce565b34801561079857600080fd5b5061034d6107a73660046132ff565b61150a565b3480156107b857600080fd5b506102ca6000805160206139de83398151915281565b3480156107da57600080fd5b506107ee6107e93660046135dd565b611582565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161025f565b34801561082657600080fd5b506102ca60008051602061399e83398151915281565b34801561084857600080fd5b5061034d61085736600461361d565b611594565b34801561086857600080fd5b506102ca610877366004613318565b611818565b60006001600160e01b03198216637965db0b60e01b14806108ad57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060006108bf611834565b90508060030180546108d090613671565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90613671565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b505050505091505090565b60006109608383611858565b9392505050565b600061097b6109768484610b7d565b611870565b61096090633b9aca006136c1565b600080610994611834565b6002015492915050565b60006109ab848484611958565b949350505050565b6000806109be61197c565b60009384526020525050604090206001015490565b60008051602061399e8339815191526109eb816119a0565b600260006109f76119aa565b8054909150600160401b900460ff1680610a1e575080546001600160401b03808416911610155b15610a3c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b038416610ab65760405162461bcd60e51b815260206004820181905260248201527f564f54333a206e6176696761746f72207265676973747279206973207a65726f60448201526064015b60405180910390fd5b6000610ac06119ce565b60020180546001600160a01b0319166001600160a01b03871617905550805460ff60401b1916815560405160008051602061397e83398151915290610b069084906136d8565b60405180910390a150505050565b610b1d826109b3565b610b26816119a0565b610b3083836119f2565b50505050565b6000610b40611a9a565b905090565b6001600160a01b0381163314610b6e5760405163334bd91960e11b815260040160405180910390fd5b610b788282611aa4565b505050565b600080610b88611b1c565b90506000610b94610fef565b90508065ffffffffffff168410610bc2578381604051637669fc0f60e11b8152600401610aad9291906136ec565b610bee610bce85611b40565b6001600160a01b0387166000908152600185016020526040902090611b72565b6001600160d01b031695945050505050565b6000805160206139de833981519152610c18816119a0565b610c20611c28565b50565b6060610c2d611c7f565b65ffffffffffff16610c3d610fef565b65ffffffffffff1614610c63576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b610ca3611c8a565b610cac82611d31565b610cb68282611d49565b5050565b6000610cc4611dfd565b506000805160206139be83398151915290565b600080610ce26119ce565b546001600160a01b031692915050565b600080610cfd611b1c565b6001600160a01b039384166000908152602091909152604090205490921692915050565b610d29610d7b565b15610d715760405162461bcd60e51b81526020600482015260186024820152771593d50cce8818dbdb9d1c9858dd081a5cc81c185d5cd95960421b6044820152606401610aad565b610c203382611e46565b600080610d86611ecd565b5460ff1692915050565b600080610d9b6119ce565b60028101549091506001600160a01b0316610db95761096083610e4e565b600281015460405163039f535760e11b81526000916001600160a01b03169063073ea6ae90610dec908790600401613436565b602060405180830381865afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190613702565b905080610e3985610e4e565b6109ab919061371b565b60006108ad82611ef1565b600080610e59611834565b6001600160a01b0390931660009081526020939093525050604090205490565b60006108ad82611f23565b6000805160206139de833981519152610e9c816119a0565b610c20611f2e565b6000606080600080600060606000610eba611f75565b8054909150158015610ece57506001810154155b610f125760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610aad565b610f1a611f99565b610f22611fb6565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080610f58611b1c565b90506000610f64610fef565b90508065ffffffffffff168410610f92578381604051637669fc0f60e11b8152600401610aad9291906136ec565b610fa8610f9e85611b40565b6002840190611b72565b6001600160d01b0316949350505050565b600080610fc461197c565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b6000610b40611c7f565b60606000611005611834565b90508060040180546108d090613671565b600080611021611b1c565b6001600160a01b0384166000908152600182016020526040902090915061104790611fc2565b6001600160d01b03169392505050565b60006110616119ce565b90508161106d33610e4e565b10156110b65760405162461bcd60e51b8152602060048201526018602482015277496e73756666696369656e7420566f743320546f6b656e7360401b6044820152606401610aad565b3360009081526001820160205260409020548211156111225760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e7420636f6e766572746564204233545220746f6b656044820152616e7360f01b6064820152608401610aad565b61112c3383611ffb565b3360009081526001820160205260408120805484929061114d90849061371b565b9091555050805460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611183903390869060040161372e565b6020604051808303816000875af11580156111a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c69190613747565b610cb65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610aad565b60006109608383612031565b60008061121b6119ce565b60028101549091506001600160a01b03166112395750600092915050565b600281015460405163039f535760e11b81526001600160a01b039091169063073ea6ae9061126b908690600401613436565b602060405180830381865afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109609190613702565b834211156112d057604051632341d78760e11b815260048101859052602401610aad565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061134a906113429060a0016040516020818303038152906040528051906020012061203f565b85858561206c565b9050611356818761209a565b6113608188611e46565b50505050505050565b6000806113746119ce565b6001600160a01b03909316600090815260019093016020525050604090205490565b834211156113ba5760405163313c898160e11b815260048101859052602401610aad565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113e98c6120cb565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006114448261203f565b905060006114548287878761206c565b9050896001600160a01b0316816001600160a01b03161461149b576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610aad565b6114a68a8a8a6120fe565b50505050505050505050565b6114bb826109b3565b6114c4816119a0565b610b308383611aa4565b6000806114d9611834565b6001600160a01b03948516600090815260019190910160209081526040808320959096168252939093525050205490565b60006115146119ce565b9050611520338361210b565b33600090815260018201602052604081208054849290611541908490613769565b909155505080546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401611183565b61158a6131d9565b6109608383612141565b600061159e6119aa565b805490915060ff600160401b82041615906001600160401b03166000811580156115c55750825b90506000826001600160401b031660011480156115e15750303b155b9050811580156115ef575080155b1561160d5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561163657845460ff60401b1916600160401b1785555b61167860405180604001604052806004815260200163564f543360e01b81525060405180604001604052806004815260200163564f543360e01b81525061217a565b61168061218c565b61168861219c565b6116ad60405180604001604052806004815260200163564f543360e01b8152506121a4565b6116b561219c565b6116bd61219c565b6116c561219c565b60006116cf6119ce565b90506001600160a01b038a166117275760405162461bcd60e51b815260206004820152601f60248201527f564f54333a2041646d696e20616464726573732063616e6e6f742062652030006044820152606401610aad565b61173260008b6119f2565b5061174b60008051602061399e8339815191528a6119f2565b506117646000805160206139de833981519152896119f2565b506001600160a01b0387166117bb5760405162461bcd60e51b815260206004820152601e60248201527f564f54333a204233545220616464726573732063616e6e6f74206265203000006044820152606401610aad565b80546001600160a01b0319166001600160a01b038816179055831561180d57845460ff60401b1916855560405160008051602061397e83398151915290611804906001906136d8565b60405180910390a15b505050505050505050565b600061182661097683611016565b6108ad90633b9aca006136c1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0090565b6000336118668185856120fe565b5060019392505050565b60008160000361188257506000919050565b6000600161188f846121cf565b901c6001901b905060018184816118a8576118a861377c565b048201901c905060018184816118c0576118c061377c565b048201901c905060018184816118d8576118d861377c565b048201901c905060018184816118f0576118f061377c565b048201901c905060018184816119085761190861377c565b048201901c905060018184816119205761192061377c565b048201901c905060018184816119385761193861377c565b048201901c9050610960818285816119525761195261377c565b04612263565b600033611966858285612279565b6119718585856122c6565b506001949350505050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b610c208133612325565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b7f8af7882bba84ab51775aa801e199e7d1dfd5f5ff08dcfbb73c614b3313e4cb0090565b6000806119fd61197c565b9050611a098484610fb9565b611a89576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611a3f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108ad565b60009150506108ad565b5092915050565b6000610b40612350565b600080611aaf61197c565b9050611abb8484610fb9565b15611a89576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108ad565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0090565b600065ffffffffffff821115611b6e576030826040516306dfcc6560e41b8152600401610aad929190613792565b5090565b815460009081816005811115611bd1576000611b8d84611870565b611b97908561371b565b60008881526020902090915081015465ffffffffffff9081169087161015611bc157809150611bcf565b611bcc816001613769565b92505b505b6000611bdf878785856123c4565b90508015611c1a57611c0487611bf660018461371b565b600091825260209091200190565b54600160301b90046001600160d01b0316611c1d565b60005b979650505050505050565b611c30612426565b6000611c3a611ecd565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611c749190613436565b60405180910390a150565b6000610b4043611b40565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d1157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d056000805160206139be833981519152546001600160a01b031690565b6001600160a01b031614155b15611d2f5760405163703e46dd60e11b815260040160405180910390fd5b565b60008051602061399e833981519152610cb6816119a0565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611da3575060408051601f3d908101601f19168201909252611da091810190613702565b60015b611dc25781604051634c9c8ce360e01b8152600401610aad9190613436565b6000805160206139be8339815191528114611df357604051632a87526960e21b815260048101829052602401610aad565b610b78838361244b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d2f5760405163703e46dd60e11b815260040160405180910390fd5b6000611e50611b1c565b90506000611e5d84610cf2565b6001600160a01b0385811660008181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b308184611ec8876124a1565b6124ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b600080611efc611b1c565b6001600160a01b038416600090815260018201602052604090205490915061096090612605565b60006108ad82612631565b611f3661263c565b6000611f40611ecd565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c673390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000611fa5611f75565b90508060020180546108d090613671565b606060006108bf611f75565b80546000908015611ff257611fdc83611bf660018461371b565b54600160301b90046001600160d01b0316610960565b60009392505050565b6001600160a01b038216612025576000604051634b637e8f60e11b8152600401610aad9190613436565b610cb682600083612662565b6000336118668185856122c6565b60006108ad61204c611a9a565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061207e888888886127d8565b92509250925061208e828261289d565b50909695505050505050565b60006120a5836120cb565b9050808214610b785782816040516301d4b62360e61b8152600401610aad92919061372e565b6000806120d6612956565b6001600160a01b03909316600090815260209390935250506040902080546001810190915590565b610b78838383600161297a565b6001600160a01b03821661213557600060405163ec442f0560e01b8152600401610aad9190613436565b610cb660008383612662565b6121496131d9565b6000612153611b1c565b6001600160a01b038516600090815260018201602052604090209091506109ab9084612a5f565b612182612ac3565b610cb68282612ae8565b612194612ac3565b611d2f612b19565b611d2f612ac3565b6121ac612ac3565b610c2081604051806040016040528060018152602001603160f81b815250612b36565b600080608083901c156121e457608092831c92015b604083901c156121f657604092831c92015b602083901c1561220857602092831c92015b601083901c1561221a57601092831c92015b600883901c1561222c57600892831c92015b600483901c1561223e57600492831c92015b600283901c1561225057600292831c92015b600183901c156108ad5760010192915050565b60008183106122725781610960565b5090919050565b600061228584846114ce565b90506000198114610b3057818110156122b757828183604051637dc7a0d960e11b8152600401610aad939291906137a5565b610b308484848403600061297a565b6001600160a01b0383166122f0576000604051634b637e8f60e11b8152600401610aad9190613436565b6001600160a01b03821661231a57600060405163ec442f0560e01b8152600401610aad9190613436565b610b78838383612662565b61232f8282610fb9565b610cb657808260405163e2517d3f60e01b8152600401610aad92919061372e565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61237b612b77565b612383612bde565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60005b8183101561241e5760006123db8484612c1f565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561240a57809250612418565b612415816001613769565b93505b506123c7565b509392505050565b61242e610d7b565b611d2f57604051638dfc202b60e01b815260040160405180910390fd5b61245482612c3a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561249957610b788282612c96565b610cb6612d0c565b60006108ad82610e4e565b60006124b6611b1c565b9050826001600160a01b0316846001600160a01b0316141580156124da5750600082115b15610b30576001600160a01b03841615612572576001600160a01b03841660009081526001820160205260408120819061251f90612d2b61251a87612d37565b612d66565b6001600160d01b031691506001600160d01b03169150856001600160a01b03166000805160206139fe8339815191528383604051612567929190918252602082015260400190565b60405180910390a250505b6001600160a01b03831615610b30576001600160a01b0383166000908152600182016020526040812081906125ad90612d9f61251a87612d37565b6001600160d01b031691506001600160d01b03169150846001600160a01b03166000805160206139fe83398151915283836040516125f5929190918252602082015260400190565b60405180910390a2505050505050565b600063ffffffff821115611b6e576020826040516306dfcc6560e41b8152600401610aad929190613792565b600080610e59612956565b612644610d7b565b15611d2f5760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0383161561278457600061267b6119ce565b60028101549091506001600160a01b03161561278257600281015460405163039f535760e11b81526000916001600160a01b03169063073ea6ae906126c4908890600401613436565b602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190613702565b9050801561278057808361271887610e4e565b612722919061371b565b10156127805760405162461bcd60e51b815260206004820152602760248201527f564f54333a207472616e73666572206578636565647320756e6c6f636b65642060448201526662616c616e636560c81b6064820152608401610aad565b505b505b61278f838383612dab565b6001600160a01b038216158015906127ac575063ffffffff823b16155b80156127c9575060006127be83610cf2565b6001600160a01b0316145b15610b7857610b788283611e46565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156128095750600091506003905082612893565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561285d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661288957506000925060019150829050612893565b9250600091508190505b9450945094915050565b60008260038111156128b1576128b16137c6565b036128ba575050565b60018260038111156128ce576128ce6137c6565b036128ec5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612900576129006137c6565b036129215760405163fce698f760e01b815260048101829052602401610aad565b6003826003811115612935576129356137c6565b03610cb6576040516335e2f38360e21b815260048101829052602401610aad565b7f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0090565b6000612984611834565b90506001600160a01b0385166129b057600060405163e602df0560e01b8152600401610aad9190613436565b6001600160a01b0384166129da576000604051634a1406b160e11b8152600401610aad9190613436565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115612a5857836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612a4f91815260200190565b60405180910390a35b5050505050565b612a676131d9565b826000018263ffffffff1681548110612a8257612a826137dc565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b612acb612e11565b611d2f57604051631afcd79f60e31b815260040160405180910390fd5b612af0612ac3565b6000612afa611834565b905060038101612b0a8482613840565b5060048101610b308382613840565b612b21612ac3565b6000612b2b611ecd565b805460ff1916905550565b612b3e612ac3565b6000612b48611f75565b905060028101612b588482613840565b5060038101612b678382613840565b5060008082556001909101555050565b600080612b82611f75565b90506000612b8e611f99565b805190915015612ba657805160209091012092915050565b81548015612bb5579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080612be9611f75565b90506000612bf5611fb6565b805190915015612c0d57805160209091012092915050565b60018201548015612bb5579392505050565b6000612c2e60028484186138ff565b61096090848416613769565b806001600160a01b03163b600003612c675780604051634c9c8ce360e01b8152600401610aad9190613436565b6000805160206139be83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cb39190613921565b600060405180830381855af49150503d8060008114612cee576040519150601f19603f3d011682016040523d82523d6000602084013e612cf3565b606091505b5091509150612d03858383612e2b565b95945050505050565b3415611d2f5760405163b398979f60e01b815260040160405180910390fd5b6000610960828461393d565b60006001600160d01b03821115611b6e5760d0826040516306dfcc6560e41b8152600401610aad929190613792565b600080612d92612d74610fef565b612d8a612d8088611fc2565b868863ffffffff16565b879190612e7e565b915091505b935093915050565b6000610960828461395d565b612db6838383612e8c565b6001600160a01b038316612e06576000612dce610989565b90506001600160d01b0380821115612e0357604051630e58ae9360e11b81526004810183905260248101829052604401610aad565b50505b610b78838383612e9f565b6000612e1b6119aa565b54600160401b900460ff16919050565b606082612e4057612e3b82612f0e565b610960565b8151158015612e5757506001600160a01b0384163b155b15612e775783604051639996b31560e01b8152600401610aad9190613436565b5080610960565b600080612d92858585612f37565b612e9461263c565b610b788383836130b1565b6000612ea9611b1c565b90506001600160a01b038416612ecf57612ecc81600201612d9f61251a85612d37565b50505b6001600160a01b038316612ef357612ef081600201612d2b61251a85612d37565b50505b610b30612eff85610cf2565b612f0885610cf2565b846124ac565b805115612f1e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b825460009081908015613056576000612f5587611bf660018561371b565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612fa957604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612ff55784612fcc88611bf660018661371b565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055613046565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150612d979050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612d97565b60006130bb611834565b90506001600160a01b0384166130ea57818160020160008282546130df9190613769565b909155506131499050565b6001600160a01b0384166000908152602082905260409020548281101561312a5784818460405163391434e360e21b8152600401610aad939291906137a5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613167576002810180548390039055613186565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131cb91815260200190565b60405180910390a350505050565b604080518082019091526000808252602082015290565b60006020828403121561320257600080fd5b81356001600160e01b03198116811461096057600080fd5b60005b8381101561323557818101518382015260200161321d565b50506000910152565b6000815180845261325681602086016020860161321a565b601f01601f19169290920160200192915050565b602081526000610960602083018461323e565b80356001600160a01b038116811461329457600080fd5b919050565b600080604083850312156132ac57600080fd5b6132b58361327d565b946020939093013593505050565b6000806000606084860312156132d857600080fd5b6132e18461327d565b92506132ef6020850161327d565b9150604084013590509250925092565b60006020828403121561331157600080fd5b5035919050565b60006020828403121561332a57600080fd5b6109608261327d565b6000806040838503121561334657600080fd5b823591506133566020840161327d565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561338857600080fd5b6133918361327d565b915060208301356001600160401b03808211156133ad57600080fd5b818501915085601f8301126133c157600080fd5b8135818111156133d3576133d361335f565b604051601f8201601f19908116603f011681019083821181831017156133fb576133fb61335f565b8160405282815288602084870101111561341457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60ff60f81b881681526000602060e08184015261346a60e084018a61323e565b838103604085015261347c818a61323e565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156134ce578351835292840192918401916001016134b2565b50909c9b505050505050505050505050565b803560ff8116811461329457600080fd5b60008060008060008060c0878903121561350a57600080fd5b6135138761327d565b9550602087013594506040870135935061352f606088016134e0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561356457600080fd5b61356d8861327d565b965061357b6020890161327d565b95506040880135945060608801359350613597608089016134e0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135c657600080fd5b6135cf8361327d565b91506133566020840161327d565b600080604083850312156135f057600080fd5b6135f98361327d565b9150602083013563ffffffff8116811461361257600080fd5b809150509250929050565b6000806000806080858703121561363357600080fd5b61363c8561327d565b935061364a6020860161327d565b92506136586040860161327d565b91506136666060860161327d565b905092959194509250565b600181811c9082168061368557607f821691505b6020821081036136a557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108ad576108ad6136ab565b6001600160401b0391909116815260200190565b91825265ffffffffffff16602082015260400190565b60006020828403121561371457600080fd5b5051919050565b818103818111156108ad576108ad6136ab565b6001600160a01b03929092168252602082015260400190565b60006020828403121561375957600080fd5b8151801515811461096057600080fd5b808201808211156108ad576108ad6136ab565b634e487b7160e01b600052601260045260246000fd5b60ff929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b601f821115610b7857600081815260208120601f850160051c810160208610156138195750805b601f850160051c820191505b8181101561383857828155600101613825565b505050505050565b81516001600160401b038111156138595761385961335f565b61386d816138678454613671565b846137f2565b602080601f8311600181146138a2576000841561388a5750858301515b600019600386901b1c1916600185901b178555613838565b600085815260208120601f198616915b828110156138d1578886015182559484019460019091019084016138b2565b50858210156138ef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008261391c57634e487b7160e01b600052601260045260246000fd5b500490565b6000825161393381846020870161321a565b9190910192915050565b6001600160d01b03828116828216039080821115611a9357611a936136ab565b6001600160d01b03818116838216019080821115611a9357611a936136ab56fec7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862adec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724a264697066735822122032ff335e5c3dc0da7ce1b28ad0bbfb8d79dbd5c837c1435ec04457568835374764736f6c63430008140033",
  "deployedBytecode": "0x60806040526004361061022e5760003560e01c806301ffc9a71461023357806306fdde0314610268578063095ea7b31461028a578063114d621e146102aa57806318160ddd146102d857806323b872dd146102ed578063248a9ca31461030d57806329b6eca91461032d5780632f2ff15d1461034f578063313ce5671461036f5780633644e5151461038b57806336568abe146103a05780633a46b1a8146103c05780633f4ba83a146103e05780634bf5d7e9146103f55780634f1ef2861461040a57806352d1902d1461041d57806354fd4d5014610432578063582a486a1461045c578063587cde1e1461047e5780635c19a95c1461049e5780635c975abb146104be5780635e0fac2e146104d35780636fcfff45146104f357806370a08231146105285780637ecebe00146105485780638456cb591461056857806384b0196e1461057d5780638e539e8c146105a557806391d14854146105c557806391ddadf4146105e557806395d89b41146106115780639ab24eb0146106265780639ae05c3514610646578063a217fddf14610666578063a9059cbb1461067b578063ad3cb1cc1461069b578063b0385a12146106cc578063c3cda520146106ec578063c731790a1461070c578063d505accf1461072c578063d547741f1461074c578063dd62ed3e1461076c578063e23285a01461078c578063e63ab1e9146107ac578063f1127ed8146107ce578063f72c0d8b1461081a578063f8c8765e1461083c578063faad86761461085c575b600080fd5b34801561023f57600080fd5b5061025361024e3660046131f0565b61087c565b60405190151581526020015b60405180910390f35b34801561027457600080fd5b5061027d6108b3565b60405161025f919061326a565b34801561029657600080fd5b506102536102a5366004613299565b610954565b3480156102b657600080fd5b506102ca6102c5366004613299565b610967565b60405190815260200161025f565b3480156102e457600080fd5b506102ca610989565b3480156102f957600080fd5b506102536103083660046132c3565b61099e565b34801561031957600080fd5b506102ca6103283660046132ff565b6109b3565b34801561033957600080fd5b5061034d610348366004613318565b6109d3565b005b34801561035b57600080fd5b5061034d61036a366004613333565b610b14565b34801561037b57600080fd5b506040516012815260200161025f565b34801561039757600080fd5b506102ca610b36565b3480156103ac57600080fd5b5061034d6103bb366004613333565b610b45565b3480156103cc57600080fd5b506102ca6103db366004613299565b610b7d565b3480156103ec57600080fd5b5061034d610c00565b34801561040157600080fd5b5061027d610c23565b61034d610418366004613375565b610c9b565b34801561042957600080fd5b506102ca610cba565b34801561043e57600080fd5b506040805180820190915260018152601960f91b602082015261027d565b34801561046857600080fd5b50610471610cd7565b60405161025f9190613436565b34801561048a57600080fd5b50610471610499366004613318565b610cf2565b3480156104aa57600080fd5b5061034d6104b9366004613318565b610d21565b3480156104ca57600080fd5b50610253610d7b565b3480156104df57600080fd5b506102ca6104ee366004613318565b610d90565b3480156104ff57600080fd5b5061051361050e366004613318565b610e43565b60405163ffffffff909116815260200161025f565b34801561053457600080fd5b506102ca610543366004613318565b610e4e565b34801561055457600080fd5b506102ca610563366004613318565b610e79565b34801561057457600080fd5b5061034d610e84565b34801561058957600080fd5b50610592610ea4565b60405161025f979695949392919061344a565b3480156105b157600080fd5b506102ca6105c03660046132ff565b610f4d565b3480156105d157600080fd5b506102536105e0366004613333565b610fb9565b3480156105f157600080fd5b506105fa610fef565b60405165ffffffffffff909116815260200161025f565b34801561061d57600080fd5b5061027d610ff9565b34801561063257600080fd5b506102ca610641366004613318565b611016565b34801561065257600080fd5b5061034d6106613660046132ff565b611057565b34801561067257600080fd5b506102ca600081565b34801561068757600080fd5b50610253610696366004613299565b611204565b3480156106a757600080fd5b5061027d604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156106d857600080fd5b506102ca6106e7366004613318565b611210565b3480156106f857600080fd5b5061034d6107073660046134f1565b6112ac565b34801561071857600080fd5b506102ca610727366004613318565b611369565b34801561073857600080fd5b5061034d610747366004613549565b611396565b34801561075857600080fd5b5061034d610767366004613333565b6114b2565b34801561077857600080fd5b506102ca6107873660046135b3565b6114ce565b34801561079857600080fd5b5061034d6107a73660046132ff565b61150a565b3480156107b857600080fd5b506102ca6000805160206139de83398151915281565b3480156107da57600080fd5b506107ee6107e93660046135dd565b611582565b60408051825165ffffffffffff1681526020928301516001600160d01b0316928101929092520161025f565b34801561082657600080fd5b506102ca60008051602061399e83398151915281565b34801561084857600080fd5b5061034d61085736600461361d565b611594565b34801561086857600080fd5b506102ca610877366004613318565b611818565b60006001600160e01b03198216637965db0b60e01b14806108ad57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060006108bf611834565b90508060030180546108d090613671565b80601f01602080910402602001604051908101604052809291908181526020018280546108fc90613671565b80156109495780601f1061091e57610100808354040283529160200191610949565b820191906000526020600020905b81548152906001019060200180831161092c57829003601f168201915b505050505091505090565b60006109608383611858565b9392505050565b600061097b6109768484610b7d565b611870565b61096090633b9aca006136c1565b600080610994611834565b6002015492915050565b60006109ab848484611958565b949350505050565b6000806109be61197c565b60009384526020525050604090206001015490565b60008051602061399e8339815191526109eb816119a0565b600260006109f76119aa565b8054909150600160401b900460ff1680610a1e575080546001600160401b03808416911610155b15610a3c5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160481b0319166001600160401b03831617600160401b1781556001600160a01b038416610ab65760405162461bcd60e51b815260206004820181905260248201527f564f54333a206e6176696761746f72207265676973747279206973207a65726f60448201526064015b60405180910390fd5b6000610ac06119ce565b60020180546001600160a01b0319166001600160a01b03871617905550805460ff60401b1916815560405160008051602061397e83398151915290610b069084906136d8565b60405180910390a150505050565b610b1d826109b3565b610b26816119a0565b610b3083836119f2565b50505050565b6000610b40611a9a565b905090565b6001600160a01b0381163314610b6e5760405163334bd91960e11b815260040160405180910390fd5b610b788282611aa4565b505050565b600080610b88611b1c565b90506000610b94610fef565b90508065ffffffffffff168410610bc2578381604051637669fc0f60e11b8152600401610aad9291906136ec565b610bee610bce85611b40565b6001600160a01b0387166000908152600185016020526040902090611b72565b6001600160d01b031695945050505050565b6000805160206139de833981519152610c18816119a0565b610c20611c28565b50565b6060610c2d611c7f565b65ffffffffffff16610c3d610fef565b65ffffffffffff1614610c63576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b610ca3611c8a565b610cac82611d31565b610cb68282611d49565b5050565b6000610cc4611dfd565b506000805160206139be83398151915290565b600080610ce26119ce565b546001600160a01b031692915050565b600080610cfd611b1c565b6001600160a01b039384166000908152602091909152604090205490921692915050565b610d29610d7b565b15610d715760405162461bcd60e51b81526020600482015260186024820152771593d50cce8818dbdb9d1c9858dd081a5cc81c185d5cd95960421b6044820152606401610aad565b610c203382611e46565b600080610d86611ecd565b5460ff1692915050565b600080610d9b6119ce565b60028101549091506001600160a01b0316610db95761096083610e4e565b600281015460405163039f535760e11b81526000916001600160a01b03169063073ea6ae90610dec908790600401613436565b602060405180830381865afa158015610e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2d9190613702565b905080610e3985610e4e565b6109ab919061371b565b60006108ad82611ef1565b600080610e59611834565b6001600160a01b0390931660009081526020939093525050604090205490565b60006108ad82611f23565b6000805160206139de833981519152610e9c816119a0565b610c20611f2e565b6000606080600080600060606000610eba611f75565b8054909150158015610ece57506001810154155b610f125760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610aad565b610f1a611f99565b610f22611fb6565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080610f58611b1c565b90506000610f64610fef565b90508065ffffffffffff168410610f92578381604051637669fc0f60e11b8152600401610aad9291906136ec565b610fa8610f9e85611b40565b6002840190611b72565b6001600160d01b0316949350505050565b600080610fc461197c565b6000948552602090815260408086206001600160a01b03959095168652939052505090205460ff1690565b6000610b40611c7f565b60606000611005611834565b90508060040180546108d090613671565b600080611021611b1c565b6001600160a01b0384166000908152600182016020526040902090915061104790611fc2565b6001600160d01b03169392505050565b60006110616119ce565b90508161106d33610e4e565b10156110b65760405162461bcd60e51b8152602060048201526018602482015277496e73756666696369656e7420566f743320546f6b656e7360401b6044820152606401610aad565b3360009081526001820160205260409020548211156111225760405162461bcd60e51b815260206004820152602260248201527f496e73756666696369656e7420636f6e766572746564204233545220746f6b656044820152616e7360f01b6064820152608401610aad565b61112c3383611ffb565b3360009081526001820160205260408120805484929061114d90849061371b565b9091555050805460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611183903390869060040161372e565b6020604051808303816000875af11580156111a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c69190613747565b610cb65760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610aad565b60006109608383612031565b60008061121b6119ce565b60028101549091506001600160a01b03166112395750600092915050565b600281015460405163039f535760e11b81526001600160a01b039091169063073ea6ae9061126b908690600401613436565b602060405180830381865afa158015611288573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109609190613702565b834211156112d057604051632341d78760e11b815260048101859052602401610aad565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b03881691810191909152606081018690526080810185905260009061134a906113429060a0016040516020818303038152906040528051906020012061203f565b85858561206c565b9050611356818761209a565b6113608188611e46565b50505050505050565b6000806113746119ce565b6001600160a01b03909316600090815260019093016020525050604090205490565b834211156113ba5760405163313c898160e11b815260048101859052602401610aad565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113e98c6120cb565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006114448261203f565b905060006114548287878761206c565b9050896001600160a01b0316816001600160a01b03161461149b576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610aad565b6114a68a8a8a6120fe565b50505050505050505050565b6114bb826109b3565b6114c4816119a0565b610b308383611aa4565b6000806114d9611834565b6001600160a01b03948516600090815260019190910160209081526040808320959096168252939093525050205490565b60006115146119ce565b9050611520338361210b565b33600090815260018201602052604081208054849290611541908490613769565b909155505080546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401611183565b61158a6131d9565b6109608383612141565b600061159e6119aa565b805490915060ff600160401b82041615906001600160401b03166000811580156115c55750825b90506000826001600160401b031660011480156115e15750303b155b9050811580156115ef575080155b1561160d5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561163657845460ff60401b1916600160401b1785555b61167860405180604001604052806004815260200163564f543360e01b81525060405180604001604052806004815260200163564f543360e01b81525061217a565b61168061218c565b61168861219c565b6116ad60405180604001604052806004815260200163564f543360e01b8152506121a4565b6116b561219c565b6116bd61219c565b6116c561219c565b60006116cf6119ce565b90506001600160a01b038a166117275760405162461bcd60e51b815260206004820152601f60248201527f564f54333a2041646d696e20616464726573732063616e6e6f742062652030006044820152606401610aad565b61173260008b6119f2565b5061174b60008051602061399e8339815191528a6119f2565b506117646000805160206139de833981519152896119f2565b506001600160a01b0387166117bb5760405162461bcd60e51b815260206004820152601e60248201527f564f54333a204233545220616464726573732063616e6e6f74206265203000006044820152606401610aad565b80546001600160a01b0319166001600160a01b038816179055831561180d57845460ff60401b1916855560405160008051602061397e83398151915290611804906001906136d8565b60405180910390a15b505050505050505050565b600061182661097683611016565b6108ad90633b9aca006136c1565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0090565b6000336118668185856120fe565b5060019392505050565b60008160000361188257506000919050565b6000600161188f846121cf565b901c6001901b905060018184816118a8576118a861377c565b048201901c905060018184816118c0576118c061377c565b048201901c905060018184816118d8576118d861377c565b048201901c905060018184816118f0576118f061377c565b048201901c905060018184816119085761190861377c565b048201901c905060018184816119205761192061377c565b048201901c905060018184816119385761193861377c565b048201901c9050610960818285816119525761195261377c565b04612263565b600033611966858285612279565b6119718585856122c6565b506001949350505050565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b610c208133612325565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b7f8af7882bba84ab51775aa801e199e7d1dfd5f5ff08dcfbb73c614b3313e4cb0090565b6000806119fd61197c565b9050611a098484610fb9565b611a89576000848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611a3f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108ad565b60009150506108ad565b5092915050565b6000610b40612350565b600080611aaf61197c565b9050611abb8484610fb9565b15611a89576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108ad565b7fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0090565b600065ffffffffffff821115611b6e576030826040516306dfcc6560e41b8152600401610aad929190613792565b5090565b815460009081816005811115611bd1576000611b8d84611870565b611b97908561371b565b60008881526020902090915081015465ffffffffffff9081169087161015611bc157809150611bcf565b611bcc816001613769565b92505b505b6000611bdf878785856123c4565b90508015611c1a57611c0487611bf660018461371b565b600091825260209091200190565b54600160301b90046001600160d01b0316611c1d565b60005b979650505050505050565b611c30612426565b6000611c3a611ecd565b805460ff1916815590507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611c749190613436565b60405180910390a150565b6000610b4043611b40565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d1157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d056000805160206139be833981519152546001600160a01b031690565b6001600160a01b031614155b15611d2f5760405163703e46dd60e11b815260040160405180910390fd5b565b60008051602061399e833981519152610cb6816119a0565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611da3575060408051601f3d908101601f19168201909252611da091810190613702565b60015b611dc25781604051634c9c8ce360e01b8152600401610aad9190613436565b6000805160206139be8339815191528114611df357604051632a87526960e21b815260048101829052602401610aad565b610b78838361244b565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d2f5760405163703e46dd60e11b815260040160405180910390fd5b6000611e50611b1c565b90506000611e5d84610cf2565b6001600160a01b0385811660008181526020869052604080822080546001600160a01b031916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610b308184611ec8876124a1565b6124ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330090565b600080611efc611b1c565b6001600160a01b038416600090815260018201602052604090205490915061096090612605565b60006108ad82612631565b611f3661263c565b6000611f40611ecd565b805460ff1916600117815590507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c673390565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10090565b60606000611fa5611f75565b90508060020180546108d090613671565b606060006108bf611f75565b80546000908015611ff257611fdc83611bf660018461371b565b54600160301b90046001600160d01b0316610960565b60009392505050565b6001600160a01b038216612025576000604051634b637e8f60e11b8152600401610aad9190613436565b610cb682600083612662565b6000336118668185856122c6565b60006108ad61204c611a9a565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061207e888888886127d8565b92509250925061208e828261289d565b50909695505050505050565b60006120a5836120cb565b9050808214610b785782816040516301d4b62360e61b8152600401610aad92919061372e565b6000806120d6612956565b6001600160a01b03909316600090815260209390935250506040902080546001810190915590565b610b78838383600161297a565b6001600160a01b03821661213557600060405163ec442f0560e01b8152600401610aad9190613436565b610cb660008383612662565b6121496131d9565b6000612153611b1c565b6001600160a01b038516600090815260018201602052604090209091506109ab9084612a5f565b612182612ac3565b610cb68282612ae8565b612194612ac3565b611d2f612b19565b611d2f612ac3565b6121ac612ac3565b610c2081604051806040016040528060018152602001603160f81b815250612b36565b600080608083901c156121e457608092831c92015b604083901c156121f657604092831c92015b602083901c1561220857602092831c92015b601083901c1561221a57601092831c92015b600883901c1561222c57600892831c92015b600483901c1561223e57600492831c92015b600283901c1561225057600292831c92015b600183901c156108ad5760010192915050565b60008183106122725781610960565b5090919050565b600061228584846114ce565b90506000198114610b3057818110156122b757828183604051637dc7a0d960e11b8152600401610aad939291906137a5565b610b308484848403600061297a565b6001600160a01b0383166122f0576000604051634b637e8f60e11b8152600401610aad9190613436565b6001600160a01b03821661231a57600060405163ec442f0560e01b8152600401610aad9190613436565b610b78838383612662565b61232f8282610fb9565b610cb657808260405163e2517d3f60e01b8152600401610aad92919061372e565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61237b612b77565b612383612bde565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60005b8183101561241e5760006123db8484612c1f565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff16111561240a57809250612418565b612415816001613769565b93505b506123c7565b509392505050565b61242e610d7b565b611d2f57604051638dfc202b60e01b815260040160405180910390fd5b61245482612c3a565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561249957610b788282612c96565b610cb6612d0c565b60006108ad82610e4e565b60006124b6611b1c565b9050826001600160a01b0316846001600160a01b0316141580156124da5750600082115b15610b30576001600160a01b03841615612572576001600160a01b03841660009081526001820160205260408120819061251f90612d2b61251a87612d37565b612d66565b6001600160d01b031691506001600160d01b03169150856001600160a01b03166000805160206139fe8339815191528383604051612567929190918252602082015260400190565b60405180910390a250505b6001600160a01b03831615610b30576001600160a01b0383166000908152600182016020526040812081906125ad90612d9f61251a87612d37565b6001600160d01b031691506001600160d01b03169150846001600160a01b03166000805160206139fe83398151915283836040516125f5929190918252602082015260400190565b60405180910390a2505050505050565b600063ffffffff821115611b6e576020826040516306dfcc6560e41b8152600401610aad929190613792565b600080610e59612956565b612644610d7b565b15611d2f5760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b0383161561278457600061267b6119ce565b60028101549091506001600160a01b03161561278257600281015460405163039f535760e11b81526000916001600160a01b03169063073ea6ae906126c4908890600401613436565b602060405180830381865afa1580156126e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127059190613702565b9050801561278057808361271887610e4e565b612722919061371b565b10156127805760405162461bcd60e51b815260206004820152602760248201527f564f54333a207472616e73666572206578636565647320756e6c6f636b65642060448201526662616c616e636560c81b6064820152608401610aad565b505b505b61278f838383612dab565b6001600160a01b038216158015906127ac575063ffffffff823b16155b80156127c9575060006127be83610cf2565b6001600160a01b0316145b15610b7857610b788283611e46565b600080806fa2a8918ca85bafe22016d0b997e4df60600160ff1b038411156128095750600091506003905082612893565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561285d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661288957506000925060019150829050612893565b9250600091508190505b9450945094915050565b60008260038111156128b1576128b16137c6565b036128ba575050565b60018260038111156128ce576128ce6137c6565b036128ec5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612900576129006137c6565b036129215760405163fce698f760e01b815260048101829052602401610aad565b6003826003811115612935576129356137c6565b03610cb6576040516335e2f38360e21b815260048101829052602401610aad565b7f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0090565b6000612984611834565b90506001600160a01b0385166129b057600060405163e602df0560e01b8152600401610aad9190613436565b6001600160a01b0384166129da576000604051634a1406b160e11b8152600401610aad9190613436565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115612a5857836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612a4f91815260200190565b60405180910390a35b5050505050565b612a676131d9565b826000018263ffffffff1681548110612a8257612a826137dc565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b612acb612e11565b611d2f57604051631afcd79f60e31b815260040160405180910390fd5b612af0612ac3565b6000612afa611834565b905060038101612b0a8482613840565b5060048101610b308382613840565b612b21612ac3565b6000612b2b611ecd565b805460ff1916905550565b612b3e612ac3565b6000612b48611f75565b905060028101612b588482613840565b5060038101612b678382613840565b5060008082556001909101555050565b600080612b82611f75565b90506000612b8e611f99565b805190915015612ba657805160209091012092915050565b81548015612bb5579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600080612be9611f75565b90506000612bf5611fb6565b805190915015612c0d57805160209091012092915050565b60018201548015612bb5579392505050565b6000612c2e60028484186138ff565b61096090848416613769565b806001600160a01b03163b600003612c675780604051634c9c8ce360e01b8152600401610aad9190613436565b6000805160206139be83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612cb39190613921565b600060405180830381855af49150503d8060008114612cee576040519150601f19603f3d011682016040523d82523d6000602084013e612cf3565b606091505b5091509150612d03858383612e2b565b95945050505050565b3415611d2f5760405163b398979f60e01b815260040160405180910390fd5b6000610960828461393d565b60006001600160d01b03821115611b6e5760d0826040516306dfcc6560e41b8152600401610aad929190613792565b600080612d92612d74610fef565b612d8a612d8088611fc2565b868863ffffffff16565b879190612e7e565b915091505b935093915050565b6000610960828461395d565b612db6838383612e8c565b6001600160a01b038316612e06576000612dce610989565b90506001600160d01b0380821115612e0357604051630e58ae9360e11b81526004810183905260248101829052604401610aad565b50505b610b78838383612e9f565b6000612e1b6119aa565b54600160401b900460ff16919050565b606082612e4057612e3b82612f0e565b610960565b8151158015612e5757506001600160a01b0384163b155b15612e775783604051639996b31560e01b8152600401610aad9190613436565b5080610960565b600080612d92858585612f37565b612e9461263c565b610b788383836130b1565b6000612ea9611b1c565b90506001600160a01b038416612ecf57612ecc81600201612d9f61251a85612d37565b50505b6001600160a01b038316612ef357612ef081600201612d2b61251a85612d37565b50505b610b30612eff85610cf2565b612f0885610cf2565b846124ac565b805115612f1e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b825460009081908015613056576000612f5587611bf660018561371b565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b031660208401529192509087161015612fa957604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603612ff55784612fcc88611bf660018661371b565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055613046565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160301b029216919091179101555b602001519250839150612d979050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b029190931617920191909155905081612d97565b60006130bb611834565b90506001600160a01b0384166130ea57818160020160008282546130df9190613769565b909155506131499050565b6001600160a01b0384166000908152602082905260409020548281101561312a5784818460405163391434e360e21b8152600401610aad939291906137a5565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613167576002810180548390039055613186565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131cb91815260200190565b60405180910390a350505050565b604080518082019091526000808252602082015290565b60006020828403121561320257600080fd5b81356001600160e01b03198116811461096057600080fd5b60005b8381101561323557818101518382015260200161321d565b50506000910152565b6000815180845261325681602086016020860161321a565b601f01601f19169290920160200192915050565b602081526000610960602083018461323e565b80356001600160a01b038116811461329457600080fd5b919050565b600080604083850312156132ac57600080fd5b6132b58361327d565b946020939093013593505050565b6000806000606084860312156132d857600080fd5b6132e18461327d565b92506132ef6020850161327d565b9150604084013590509250925092565b60006020828403121561331157600080fd5b5035919050565b60006020828403121561332a57600080fd5b6109608261327d565b6000806040838503121561334657600080fd5b823591506133566020840161327d565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561338857600080fd5b6133918361327d565b915060208301356001600160401b03808211156133ad57600080fd5b818501915085601f8301126133c157600080fd5b8135818111156133d3576133d361335f565b604051601f8201601f19908116603f011681019083821181831017156133fb576133fb61335f565b8160405282815288602084870101111561341457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60ff60f81b881681526000602060e08184015261346a60e084018a61323e565b838103604085015261347c818a61323e565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156134ce578351835292840192918401916001016134b2565b50909c9b505050505050505050505050565b803560ff8116811461329457600080fd5b60008060008060008060c0878903121561350a57600080fd5b6135138761327d565b9550602087013594506040870135935061352f606088016134e0565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561356457600080fd5b61356d8861327d565b965061357b6020890161327d565b95506040880135945060608801359350613597608089016134e0565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156135c657600080fd5b6135cf8361327d565b91506133566020840161327d565b600080604083850312156135f057600080fd5b6135f98361327d565b9150602083013563ffffffff8116811461361257600080fd5b809150509250929050565b6000806000806080858703121561363357600080fd5b61363c8561327d565b935061364a6020860161327d565b92506136586040860161327d565b91506136666060860161327d565b905092959194509250565b600181811c9082168061368557607f821691505b6020821081036136a557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176108ad576108ad6136ab565b6001600160401b0391909116815260200190565b91825265ffffffffffff16602082015260400190565b60006020828403121561371457600080fd5b5051919050565b818103818111156108ad576108ad6136ab565b6001600160a01b03929092168252602082015260400190565b60006020828403121561375957600080fd5b8151801515811461096057600080fd5b808201808211156108ad576108ad6136ab565b634e487b7160e01b600052601260045260246000fd5b60ff929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b601f821115610b7857600081815260208120601f850160051c810160208610156138195750805b601f850160051c820191505b8181101561383857828155600101613825565b505050505050565b81516001600160401b038111156138595761385961335f565b61386d816138678454613671565b846137f2565b602080601f8311600181146138a2576000841561388a5750858301515b600019600386901b1c1916600185901b178555613838565b600085815260208120601f198616915b828110156138d1578886015182559484019460019091019084016138b2565b50858210156138ef5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008261391c57634e487b7160e01b600052601260045260246000fd5b500490565b6000825161393381846020870161321a565b9190910192915050565b6001600160d01b03828116828216039080821115611a9357611a936136ab565b6001600160d01b03818116838216019080821115611a9357611a936136ab56fec7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2189ab7a9244df0848122154315af71fe140f3db0fe014031783b0946b8c9d2e3360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862adec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724a264697066735822122032ff335e5c3dc0da7ce1b28ad0bbfb8d79dbd5c837c1435ec04457568835374764736f6c63430008140033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
