{
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": 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": true,
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "decimals",
          "type": "uint8"
        }
      ],
      "name": "UpdateDetails",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "_PERMIT_TYPEHASH",
      "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": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amnt",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "detailsHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "domainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "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": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amnt",
          "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": "",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "_v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "_r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_newName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_newSymbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "_newDecimals",
          "type": "uint8"
        }
      ],
      "name": "setDetails",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_detailsHash",
          "type": "bytes32"
        }
      ],
      "name": "setDetailsHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "_recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9608052610120604052600160e052603160f81b610100527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660a05261190160f01b60c05234801561007057600080fd5b5060805160a05160c05160f01c6124de6100a5600039806110fa52508061142f525080610d84528061109652506124de6000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638129fc1c116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461060b578063f2fde38b14610646578063f698da2514610679578063ffa1ad7414610681576101a3565b8063a9059cbb14610557578063cc2ab7c714610590578063d505accf146105ad576101a3565b8063982aaf6b116100c8578063982aaf6b146104dd5780639dc29fac146104e5578063a457c2d71461051e576101a3565b80638129fc1c1461049c5780638da5cb5b146104a457806395d89b41146104d5576101a3565b806340c10f191161015057806370a082311161012a57806370a082311461042e578063715018a6146104615780637ecebe0014610469576101a3565b806340c10f19146103265780634815fcb114610361578063654935f414610369576101a3565b806323b872dd1161018157806323b872dd1461028c578063313ce567146102cf57806339509351146102ed576101a3565b806306fdde03146101a8578063095ea7b31461022557806318160ddd14610272575b600080fd5b6101b0610689565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025e6004803603604081101561023b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073d565b604080519115158252519081900360200190f35b61027a610753565b60408051918252519081900360200190f35b61025e600480360360608110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610759565b6102d76107cf565b6040805160ff9092168252519081900360200190f35b61025e6004803603604081101561030357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61035f6004803603604081101561033c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561081b565b005b61027a6108d1565b61035f6004803603606081101561037f57600080fd5b81019060208101813564010000000081111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460018302840111640100000000831117156103ce57600080fd5b9193909290916020810190356401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91935091503560ff166108d7565b61027a6004803603602081101561044457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610afe565b61035f610b0f565b61027a6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bb9565b61035f610bcb565b6104ac610ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b0610d03565b61027a610d82565b61035f600480360360408110156104fb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da6565b61025e6004803603604081101561053457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e58565b61025e6004803603604081101561056d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eb4565b61035f600480360360208110156105a657600080fd5b5035610ec1565b61035f600480360360e08110156105c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f77565b61027a6004803603604081101561062157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a4565b61035f6004803603602081101561065c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112dc565b61027a61138d565b6102d7611483565b60688054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b600061074a338484611488565b50600192915050565b60675490565b60006107668484846115cf565b6107c584336107c08560405180606001604052806028815260200161241b6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260666020908152604080832033845290915290205491906117a1565b611488565b5060019392505050565b606a5460ff1690565b33600081815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161074a9185906107c09086611852565b6108236118cd565b73ffffffffffffffffffffffffffffffffffffffff16610841610ce7565b73ffffffffffffffffffffffffffffffffffffffff16146108c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd82826118d1565b5050565b606c5481565b60685460009060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415801561094c575060695460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604155b801561095b5750606a5460ff16155b905080806109de5750606c546109dc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250611a04915050565b145b610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f21636f6d6d69747465642064657461696c730000000000000000000000000000604482015290519081900360640190fd5b610a556068878761227a565b50610a626069858561227a565b50606a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580610af6578160ff168484604051808383808284376040519201829003822094508b93508a92508190508383808284376040519201829003822094507f96848da8c41ae282b5ec5c04f45fc469a8186bb78de70419275c2c402fcc27b193506000925050a45b505050505050565b6000610b0982611b3f565b92915050565b610b176118cd565b73ffffffffffffffffffffffffffffffffffffffff16610b35610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610bb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b606b6020526000908152604090205481565b600054610100900460ff1680610be45750610be4611b67565b80610bf2575060005460ff16155b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610cb5611b78565b8015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b60698054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b7f000000000000000000000000000000000000000000000000000000000000000081565b610dae6118cd565b73ffffffffffffffffffffffffffffffffffffffff16610dcc610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd8282611c6a565b600061074a33846107c0856040518060600160405280602581526020016124ad6025913933600090815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906117a1565b600061074a3384846115cf565b610ec96118cd565b73ffffffffffffffffffffffffffffffffffffffff16610ee7610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b80606c5414610ce457606c55565b83421115610fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871661106857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332305065726d69743a206f776e6572207a65726f206164647265737300604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000818152606b602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e090940190528251920191909120907f000000000000000000000000000000000000000000000000000000000000000061112161138d565b83604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b5050506020604051035190508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8b166000908152606b602052604090206001850190556112978b8b8b611488565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260666020908152604080832093909416825291909152205490565b6112e46118cd565b73ffffffffffffffffffffffffffffffffffffffff16611302610ce7565b73ffffffffffffffffffffffffffffffffffffffff161461138457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ce481611db4565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606860000160405180828054600181600116156101000203166002900480156114145780601f106113f2576101008083540402835291820191611414565b820191906000526020600020905b815481529060010190602001808311611400575b505060408051918290038220602080840196909652828201527f0000000000000000000000000000000000000000000000000000000000000000606083015260808201959095523060a0808301919091528551808303909101815260c090910190945250508151910120905090565b600081565b73ffffffffffffffffffffffffffffffffffffffff83166114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123a56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806124646025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061233a6023913960400191505060405180910390fd5b6116b2838383611f56565b6116fc816040518060600160405280602681526020016123c76026913973ffffffffffffffffffffffffffffffffffffffff861660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526065602052604080822093909355908416815220546117389082611852565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561180f5781810151838201526020016117f7565b50505050905090810190601f16801561183c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156118c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff821661195357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61195f60008383611f56565b60675461196c9082611852565b60675573ffffffffffffffffffffffffffffffffffffffff821660009081526065602052604090205461199f9082611852565b73ffffffffffffffffffffffffffffffffffffffff831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310611a6357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a26565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310611aeb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aae565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526065602052604090205490565b6000611b7230611f5b565b15905090565b600054610100900460ff1680611b915750611b91611b67565b80611b9f575060005460ff16155b611bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015611c5a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c62611f61565b610cb5612073565b73ffffffffffffffffffffffffffffffffffffffff8216611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124436021913960400191505060405180910390fd5b611ce282600083611f56565b611d2c8160405180606001604052806022815260200161235d6022913973ffffffffffffffffffffffffffffffffffffffff851660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260656020526040902055606754611d5f9082612203565b60675560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611dbc6118cd565b73ffffffffffffffffffffffffffffffffffffffff16611dda610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061237f6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b505050565b3b151590565b600054610100900460ff1680611f7a5750611f7a611b67565b80611f88575060005460ff16155b611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168061208c575061208c611b67565b8061209a575060005460ff16155b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff1615801561215557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061215f6118cd565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008282111561227457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122b05760008555612314565b82601f106122e7578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612314565b82800160010185558215612314579182015b828111156123145782358255916020019190600101906122f9565b50612320929150612324565b5090565b5b80821115612320576000815560010161232556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a",
    "sourceMap": "877:117:35:-:0;825:169;;1078:10;586:8081;1078:10;;586:8081;1078:10;-1:-1:-1;1078:10:35;;1068:21;1000:89;;-1:-1:-1;1095:68:35;;586:8081;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101a35760003560e01c80638129fc1c116100ee578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e1461060b578063f2fde38b14610646578063f698da2514610679578063ffa1ad7414610681576101a3565b8063a9059cbb14610557578063cc2ab7c714610590578063d505accf146105ad576101a3565b8063982aaf6b116100c8578063982aaf6b146104dd5780639dc29fac146104e5578063a457c2d71461051e576101a3565b80638129fc1c1461049c5780638da5cb5b146104a457806395d89b41146104d5576101a3565b806340c10f191161015057806370a082311161012a57806370a082311461042e578063715018a6146104615780637ecebe0014610469576101a3565b806340c10f19146103265780634815fcb114610361578063654935f414610369576101a3565b806323b872dd1161018157806323b872dd1461028c578063313ce567146102cf57806339509351146102ed576101a3565b806306fdde03146101a8578063095ea7b31461022557806318160ddd14610272575b600080fd5b6101b0610689565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101ea5781810151838201526020016101d2565b50505050905090810190601f1680156102175780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61025e6004803603604081101561023b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561073d565b604080519115158252519081900360200190f35b61027a610753565b60408051918252519081900360200190f35b61025e600480360360608110156102a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610759565b6102d76107cf565b6040805160ff9092168252519081900360200190f35b61025e6004803603604081101561030357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61035f6004803603604081101561033c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561081b565b005b61027a6108d1565b61035f6004803603606081101561037f57600080fd5b81019060208101813564010000000081111561039a57600080fd5b8201836020820111156103ac57600080fd5b803590602001918460018302840111640100000000831117156103ce57600080fd5b9193909290916020810190356401000000008111156103ec57600080fd5b8201836020820111156103fe57600080fd5b8035906020019184600183028401116401000000008311171561042057600080fd5b91935091503560ff166108d7565b61027a6004803603602081101561044457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610afe565b61035f610b0f565b61027a6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610bb9565b61035f610bcb565b6104ac610ce7565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101b0610d03565b61027a610d82565b61035f600480360360408110156104fb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610da6565b61025e6004803603604081101561053457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610e58565b61025e6004803603604081101561056d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610eb4565b61035f600480360360208110156105a657600080fd5b5035610ec1565b61035f600480360360e08110156105c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610f77565b61027a6004803603604081101561062157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112a4565b61035f6004803603602081101561065c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112dc565b61027a61138d565b6102d7611483565b60688054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b820191906000526020600020905b81548152906001019060200180831161071657829003601f168201915b5050505050905090565b600061074a338484611488565b50600192915050565b60675490565b60006107668484846115cf565b6107c584336107c08560405180606001604052806028815260200161241b6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260666020908152604080832033845290915290205491906117a1565b611488565b5060019392505050565b606a5460ff1690565b33600081815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161074a9185906107c09086611852565b6108236118cd565b73ffffffffffffffffffffffffffffffffffffffff16610841610ce7565b73ffffffffffffffffffffffffffffffffffffffff16146108c357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd82826118d1565b5050565b606c5481565b60685460009060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100600184161502019091160415801561094c575060695460027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001841615020190911604155b801561095b5750606a5460ff16155b905080806109de5750606c546109dc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250889250611a04915050565b145b610a4957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f21636f6d6d69747465642064657461696c730000000000000000000000000000604482015290519081900360640190fd5b610a556068878761227a565b50610a626069858561227a565b50606a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff841617905580610af6578160ff168484604051808383808284376040519201829003822094508b93508a92508190508383808284376040519201829003822094507f96848da8c41ae282b5ec5c04f45fc469a8186bb78de70419275c2c402fcc27b193506000925050a45b505050505050565b6000610b0982611b3f565b92915050565b610b176118cd565b73ffffffffffffffffffffffffffffffffffffffff16610b35610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610bb757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b606b6020526000908152604090205481565b600054610100900460ff1680610be45750610be4611b67565b80610bf2575060005460ff16155b610c47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b610cb5611b78565b8015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b60698054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107335780601f1061070857610100808354040283529160200191610733565b7f000000000000000000000000000000000000000000000000000000000000000081565b610dae6118cd565b73ffffffffffffffffffffffffffffffffffffffff16610dcc610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6108cd8282611c6a565b600061074a33846107c0856040518060600160405280602581526020016124ad6025913933600090815260666020908152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290205491906117a1565b600061074a3384846115cf565b610ec96118cd565b73ffffffffffffffffffffffffffffffffffffffff16610ee7610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614610f6957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b80606c5414610ce457606c55565b83421115610fe657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff871661106857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332305065726d69743a206f776e6572207a65726f206164647265737300604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8088166000818152606b602090815260408083205481517f00000000000000000000000000000000000000000000000000000000000000008185015280830195909552948b166060850152608084018a905260a0840185905260c08085018a90528151808603909101815260e090940190528251920191909120907f000000000000000000000000000000000000000000000000000000000000000061112161138d565b83604051602001808461ffff1660f01b81526002018381526020018281526020019350505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b5050506020604051035190508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461126157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8b166000908152606b602052604090206001850190556112978b8b8b611488565b5050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260666020908152604080832093909416825291909152205490565b6112e46118cd565b73ffffffffffffffffffffffffffffffffffffffff16611302610ce7565b73ffffffffffffffffffffffffffffffffffffffff161461138457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610ce481611db4565b6000804690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f606860000160405180828054600181600116156101000203166002900480156114145780601f106113f2576101008083540402835291820191611414565b820191906000526020600020905b815481529060010190602001808311611400575b505060408051918290038220602080840196909652828201527f0000000000000000000000000000000000000000000000000000000000000000606083015260808201959095523060a0808301919091528551808303909101815260c090910190945250508151910120905090565b600081565b73ffffffffffffffffffffffffffffffffffffffff83166114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806124896024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611560576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806123a56022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff831661163b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806124646025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061233a6023913960400191505060405180910390fd5b6116b2838383611f56565b6116fc816040518060600160405280602681526020016123c76026913973ffffffffffffffffffffffffffffffffffffffff861660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526065602052604080822093909355908416815220546117389082611852565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561184a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561180f5781810151838201526020016117f7565b50505050905090810190601f16801561183c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156118c657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff821661195357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61195f60008383611f56565b60675461196c9082611852565b60675573ffffffffffffffffffffffffffffffffffffffff821660009081526065602052604090205461199f9082611852565b73ffffffffffffffffffffffffffffffffffffffff831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310611a6357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611a26565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310611aeb57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611aae565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526065602052604090205490565b6000611b7230611f5b565b15905090565b600054610100900460ff1680611b915750611b91611b67565b80611b9f575060005460ff16155b611bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015611c5a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611c62611f61565b610cb5612073565b73ffffffffffffffffffffffffffffffffffffffff8216611cd6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806124436021913960400191505060405180910390fd5b611ce282600083611f56565b611d2c8160405180606001604052806022815260200161235d6022913973ffffffffffffffffffffffffffffffffffffffff851660009081526065602052604090205491906117a1565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260656020526040902055606754611d5f9082612203565b60675560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b611dbc6118cd565b73ffffffffffffffffffffffffffffffffffffffff16611dda610ce7565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611ec8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061237f6026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b505050565b3b151590565b600054610100900460ff1680611f7a5750611f7a611b67565b80611f88575060005460ff16155b611fdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff16158015610cb557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff168061208c575061208c611b67565b8061209a575060005460ff16155b6120ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806123ed602e913960400191505060405180910390fd5b600054610100900460ff1615801561215557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b600061215f6118cd565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610ce457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b60008282111561227457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826122b05760008555612314565b82601f106122e7578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612314565b82800160010185558215612314579182015b828111156123145782358255916020019190600101906122f9565b50612320929150612324565b5090565b5b80821115612320576000815560010161232556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa164736f6c6343000706000a",
    "sourceMap": "586:8081:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6438:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:204:62;;;;;;;;;;;;;;;;-1:-1:-1;2491:204:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5229:92;;;:::i;:::-;;;;;;;;;;;;;;;;3165:443;;;;;;;;;;;;;;;;-1:-1:-1;3165:443:62;;;;;;;;;;;;;;;;;;:::i;7354:95:35:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4004:289:62;;;;;;;;;;;;;;;;-1:-1:-1;4004:289:62;;;;;;;;;:::i;2694:104:35:-;;;;;;;;;;;;;;;;-1:-1:-1;2694:104:35;;;;;;;;;:::i;:::-;;1323:35;;;:::i;3288:1074::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3288:1074:35;-1:-1:-1;3288:1074:35;;;;:::i;6191:182::-;;;;;;;;;;;;;;;;-1:-1:-1;6191:182:35;;;;:::i;8581:84::-;;;:::i;1219:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1219:41:35;;;;:::i;1515:83::-;;;:::i;1335:85:7:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6646:99:35;;;:::i;825:169::-;;;:::i;2237:108::-;;;;;;;;;;;;;;;;-1:-1:-1;2237:108:35;;;;;;;;;:::i;4783:386:62:-;;;;;;;;;;;;;;;;-1:-1:-1;4783:386:62;;;;;;;;;:::i;2142:210::-;;;;;;;;;;;;;;;;-1:-1:-1;2142:210:62;;;;;;;;;:::i;2930:174:35:-;;;;;;;;;;;;;;;;-1:-1:-1;2930:174:35;;:::i;5026:1048::-;;;;;;;;;;;;;;;;-1:-1:-1;5026:1048:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5607:196:62:-;;;;;;;;;;;;;;;;-1:-1:-1;5607:196:62;;;;;;;;;;;:::i;8190:198:35:-;;;;;;;;;;;;;;;;-1:-1:-1;8190:198:35;;;;:::i;7561:582::-;;;:::i;171:33:68:-;;;:::i;6438:95:35:-;6516:5;6509:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6484:13;;6509:17;;6516:5;;6509:17;;6516:5;6509:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6438:95;:::o;2491:204:62:-;2608:4;2628:39;2637:10;2649:8;2659:7;2628:8;:39::i;:::-;-1:-1:-1;2684:4:62;2491:204;;;;:::o;5229:92::-;5308:6;;5229:92;:::o;3165:443::-;3304:4;3320:39;3330:7;3339:10;3351:7;3320:9;:39::i;:::-;3369:211;3391:7;3412:10;3436:134;3489:7;3436:134;;;;;;;;;;;;;;;;;:19;;;;;;;:10;:19;;;;;;;;3456:10;3436:31;;;;;;;;;:134;:35;:134::i;:::-;3369:8;:211::i;:::-;-1:-1:-1;3597:4:62;3165:443;;;;;:::o;7354:95:35:-;7428:14;;;;7354:95;:::o;4004:289:62:-;4160:10;4118:4;4206:22;;;:10;:22;;;;;;;;;:32;;;;;;;;;;4118:4;;4138:127;;4184:8;;4206:49;;4243:11;4206:36;:49::i;2694:104:35:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2774:17:35::1;2780:3;2785:5;2774;:17::i;:::-;2694:104:::0;;:::o;1323:35::-;;;;:::o;3288:1074::-;3469:5;3463:24;3440:20;;3463:24;;;;;;;;;;;;;:29;:76;;;;-1:-1:-1;3514:12:35;3508:26;;;;3514:12;3508:26;;;;;;;;;:31;3463:76;:111;;;;-1:-1:-1;3555:14:35;;;;:19;3463:111;3440:134;;3834:15;:208;;;;4031:11;;3869:142;3919:8;;3869:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3869:142:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3949:10:35;;-1:-1:-1;3949:10:35;;;;3869:142;;3949:10;;;;3869:142;;;;;;;;;-1:-1:-1;3981:12:35;;-1:-1:-1;3869:28:35;;-1:-1:-1;;3869:142:35:i;:::-;:173;3834:208;3813:273;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4150:21;:5;4163:8;;4150:21;:::i;:::-;-1:-1:-1;4181:25:35;:12;4196:10;;4181:25;:::i;:::-;-1:-1:-1;4216:14:35;:29;;;;;;;;;;4260:15;4255:101;;4332:12;4296:49;;4320:10;;4296:49;;;;;;;;;;;;;;;;;;;-1:-1:-1;4310:8:35;;-1:-1:-1;4310:8:35;;-1:-1:-1;4296:49:35;;-1:-1:-1;4310:8:35;;;;4296:49;;;;;;;;;;;;-1:-1:-1;4296:49:35;;-1:-1:-1;4296:49:35;;-1:-1:-1;;4296:49:35;4255:101;3288:1074;;;;;;:::o;6191:182::-;6311:7;6341:25;6357:8;6341:15;:25::i;:::-;6334:32;6191:182;-1:-1:-1;;6191:182:35:o;8581:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8581:84:35:o;1219:41::-;;;;;;;;;;;;;:::o;1515:83::-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1575:16:35::1;:14;:16::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;1515:83:35;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;6646:99:35:-;6726:12;6719:19;;;;;;;;;;6726:12;6719:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6694:13;;6719:19;;6726:12;;6719:19;;6726:12;6719:19;;;;;;;;;;;;;;;;;;;;;;;;825:169;;;:::o;2237:108::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:19:35::1;2325:5;2332;2319;:19::i;4783:386:62:-:0;4902:4;4922:219;4944:10;4968:8;4990:141;5044:16;4990:141;;;;;;;;;;;;;;;;;5001:10;4990:22;;;;:10;:22;;;;;;;;;:32;;;;;;;;;;;:141;:36;:141::i;2142:210::-;2262:4;2282:42;2292:10;2304;2316:7;2282:9;:42::i;2930:174:35:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3033:12:35::1;3018:11;;:27;3014:84;;3061:11;:26:::0;2930:174::o;5026:1048::-;5253:9;5234:15;:28;;5226:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5314:20;;;5306:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5397:14;;;;5380;5397;;;:6;:14;;;;;;;;;5466:183;;5494:16;5466:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5443:216;;;;;;;;;5744:26;5788:17;:15;:17::i;:::-;5823:11;5710:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5687:171;;;;;;5669:189;;5868:15;5886:30;5896:7;5905:2;5909;5913;5886:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5868:48;;5945:6;5934:17;;:7;:17;;;5926:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5996:14;;;;;;;:6;:14;;;;;6022:1;6013:10;;5996:27;;6033:34;6003:6;6050:8;6060:6;6033:8;:34::i;:::-;5026:1048;;;;;;;;;;;:::o;5607:196:62:-;5768:18;;;;5738:7;5768:18;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;5607:196::o;8190:198:35:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8334:47:35::1;8371:9;8334:36;:47::i;7561:582::-:0;7609:7;7628:16;7689:9;7677:21;;7795:141;7974:5;:10;;7958:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7958:28:35;;;;;;;;;7763:359;;;;;;;;;;;;8008:31;7763:359;;;;;;;;;;;8099:4;7763:359;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7736:400:35;;;;;;-1:-1:-1;7561:582:35;:::o;171:33:68:-;203:1;171:33;:::o;8752:380:62:-;8886:20;;;8878:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8965:22;;;8957:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9037:18;;;;;;;;:10;:18;;;;;;;;:28;;;;;;;;;;;;;:38;;;9090:35;;;;;;;;;;;;;;;;;8752:380;;;:::o;6282:636::-;6419:21;;;6411:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6513:24;;;6492:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6609:49;6630:7;6639:10;6651:6;6609:20;:49::i;:::-;6689:105;6724:6;6689:105;;;;;;;;;;;;;;;;;:17;;;;;;;:8;:17;;;;;;;:105;:21;:105::i;:::-;6669:17;;;;;;;;:8;:17;;;;;;:125;;;;6827:20;;;;;;;:32;;6852:6;6827:24;:32::i;:::-;6804:20;;;;;;;;:8;:20;;;;;;;;;:55;;;;6874:37;;;;;;;6804:20;;6874:37;;;;;;;;;;;;;6282:636;;;:::o;5432:163:24:-;5518:7;5553:12;5545:6;;;;5537:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5583:5:24;;;5432:163::o;2690:175::-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;2690:175;-1:-1:-1;;;2690:175:24:o;828:104:18:-;915:10;828:104;:::o;7191:367:62:-;7276:22;;;7268:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7345:51;7374:1;7378:8;7388:7;7345:20;:51::i;:::-;7416:6;;:19;;7427:7;7416:10;:19::i;:::-;7407:6;:28;7466:18;;;;;;;:8;:18;;;;;;:31;;7489:7;7466:22;:31::i;:::-;7445:18;;;;;;;:8;:18;;;;;;;;:52;;;;7512:39;;;;;;;7445:18;;;;7512:39;;;;;;;;;;7191:367;;:::o;7902:429:33:-;8040:7;8149:5;8143:19;8184:5;8217:7;8211:21;8254:7;8283:9;8105:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8105:205:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8078:246;;;;;;8059:265;;7902:429;;;;;:::o;5379:170:62:-;5524:18;;5494:7;5524:18;;;:8;:18;;;;;;;5379:170::o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;7883:441:62:-:0;7968:22;;;7960:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8039:51;8060:8;8078:1;8082:7;8039:20;:51::i;:::-;8122:103;8158:7;8122:103;;;;;;;;;;;;;;;;;:18;;;;;;;:8;:18;;;;;;;:103;:22;:103::i;:::-;8101:18;;;;;;;:8;:18;;;;;:124;8244:6;;:19;;8255:7;8244:10;:19::i;:::-;8235:6;:28;8278:39;;;;;;;;8305:1;;8278:39;;;;;;;;;;;;;7883:441;;:::o;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;10150:124:62:-;;;;:::o;737:413:17:-;1097:20;1135:8;;;737:413::o;759:64:18:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:18;:::o;1067:192:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:11;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;3136:155:24:-;3194:7;3226:1;3221;:6;;3213:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:24;;;3136:155::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;",
    "linkReferences": {},
    "immutableReferences": {
      "31277": [
        {
          "start": 3460,
          "length": 32
        },
        {
          "start": 4246,
          "length": 32
        }
      ],
      "31285": [
        {
          "start": 5167,
          "length": 32
        }
      ],
      "31291": [
        {
          "start": 4346,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "VERSION()": "ffa1ad74",
    "_PERMIT_TYPEHASH()": "982aaf6b",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "burn(address,uint256)": "9dc29fac",
    "decimals()": "313ce567",
    "decreaseAllowance(address,uint256)": "a457c2d7",
    "detailsHash()": "4815fcb1",
    "domainSeparator()": "f698da25",
    "increaseAllowance(address,uint256)": "39509351",
    "initialize()": "8129fc1c",
    "mint(address,uint256)": "40c10f19",
    "name()": "06fdde03",
    "nonces(address)": "7ecebe00",
    "owner()": "8da5cb5b",
    "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
    "renounceOwnership()": "715018a6",
    "setDetails(string,string,uint8)": "654935f4",
    "setDetailsHash(bytes32)": "cc2ab7c7",
    "symbol()": "95d89b41",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd",
    "transferOwnership(address)": "f2fde38b"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/BridgeToken.sol",
    "id": 31662,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "BridgeToken": [
        31661
      ],
      "ERC20": [
        43237
      ],
      "IBridgeToken": [
        33609
      ],
      "OwnableUpgradeable": [
        23168
      ],
      "TypeCasts": [
        46345
      ],
      "Version0": [
        44622
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:8622:35",
    "nodes": [
      {
        "id": 31252,
        "nodeType": "PragmaDirective",
        "src": "46:22:35",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 31254,
        "nodeType": "ImportDirective",
        "src": "116:50:35",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "./BridgeMessage.sol",
        "scope": 31662,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31253,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:13:35",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31256,
        "nodeType": "ImportDirective",
        "src": "167:59:35",
        "absolutePath": "packages/contracts-bridge/contracts/interfaces/IBridgeToken.sol",
        "file": "./interfaces/IBridgeToken.sol",
        "scope": 31662,
        "sourceUnit": 33610,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31255,
              "name": "IBridgeToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "175:12:35",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31258,
        "nodeType": "ImportDirective",
        "src": "227:45:35",
        "absolutePath": "packages/contracts-bridge/contracts/vendored/OZERC20.sol",
        "file": "./vendored/OZERC20.sol",
        "scope": 31662,
        "sourceUnit": 43238,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31257,
              "name": "ERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "235:5:35",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31260,
        "nodeType": "ImportDirective",
        "src": "319:74:35",
        "absolutePath": "packages/contracts-core/contracts/Version0.sol",
        "file": "@nomad-xyz/contracts-core/contracts/Version0.sol",
        "scope": 31662,
        "sourceUnit": 44623,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31259,
              "name": "Version0",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "327:8:35",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31262,
        "nodeType": "ImportDirective",
        "src": "394:88:35",
        "absolutePath": "packages/contracts-core/contracts/XAppConnectionManager.sol",
        "file": "@nomad-xyz/contracts-core/contracts/XAppConnectionManager.sol",
        "scope": 31662,
        "sourceUnit": 45021,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31261,
              "name": "TypeCasts",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "402:9:35",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31264,
        "nodeType": "ImportDirective",
        "src": "483:101:35",
        "absolutePath": "node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol",
        "scope": 31662,
        "sourceUnit": 23169,
        "symbolAliases": [
          {
            "foreign": {
              "id": 31263,
              "name": "OwnableUpgradeable",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "491:18:35",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 31661,
        "nodeType": "ContractDefinition",
        "src": "586:8081:35",
        "nodes": [
          {
            "id": 31277,
            "nodeType": "VariableDeclaration",
            "src": "825:169:35",
            "constant": false,
            "functionSelector": "982aaf6b",
            "mutability": "immutable",
            "name": "_PERMIT_TYPEHASH",
            "scope": 31661,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 31273,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "825:7:35",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529",
                  "id": 31275,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "900:84:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9",
                    "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""
                  },
                  "value": "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9",
                    "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""
                  }
                ],
                "id": 31274,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "877:9:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 31276,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "877:117:35",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 31285,
            "nodeType": "VariableDeclaration",
            "src": "1000:89:35",
            "constant": false,
            "mutability": "immutable",
            "name": "_EIP712_STRUCTURED_DATA_VERSION",
            "scope": 31661,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 31278,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1000:7:35",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "arguments": [
                    {
                      "hexValue": "31",
                      "id": 31282,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1084:3:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
                        "typeString": "literal_string \"1\""
                      },
                      "value": "1"
                    }
                  ],
                  "expression": {
                    "argumentTypes": [
                      {
                        "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
                        "typeString": "literal_string \"1\""
                      }
                    ],
                    "id": 31281,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "nodeType": "ElementaryTypeNameExpression",
                    "src": "1078:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                      "typeString": "type(bytes storage pointer)"
                    },
                    "typeName": {
                      "id": 31280,
                      "name": "bytes",
                      "nodeType": "ElementaryTypeName",
                      "src": "1078:5:35",
                      "typeDescriptions": {}
                    }
                  },
                  "id": 31283,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "typeConversion",
                  "lValueRequested": false,
                  "names": [],
                  "nodeType": "FunctionCall",
                  "src": "1078:10:35",
                  "tryCall": false,
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes memory"
                  }
                ],
                "id": 31279,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1068:9:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 31284,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1068:21:35",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "id": 31291,
            "nodeType": "VariableDeclaration",
            "src": "1095:68:35",
            "constant": false,
            "mutability": "immutable",
            "name": "_EIP712_PREFIX_AND_VERSION",
            "scope": 31661,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint16",
              "typeString": "uint16"
            },
            "typeName": {
              "id": 31286,
              "name": "uint16",
              "nodeType": "ElementaryTypeName",
              "src": "1095:6:35",
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307831393031",
                  "id": 31289,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1156:6:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_6401_by_1",
                    "typeString": "int_const 6401"
                  },
                  "value": "0x1901"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_rational_6401_by_1",
                    "typeString": "int_const 6401"
                  }
                ],
                "id": 31288,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "nodeType": "ElementaryTypeNameExpression",
                "src": "1149:6:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_uint16_$",
                  "typeString": "type(uint16)"
                },
                "typeName": {
                  "id": 31287,
                  "name": "uint16",
                  "nodeType": "ElementaryTypeName",
                  "src": "1149:6:35",
                  "typeDescriptions": {}
                }
              },
              "id": 31290,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1149:14:35",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_uint16",
                "typeString": "uint16"
              }
            },
            "visibility": "private"
          },
          {
            "id": 31295,
            "nodeType": "VariableDeclaration",
            "src": "1219:41:35",
            "constant": false,
            "functionSelector": "7ecebe00",
            "mutability": "mutable",
            "name": "nonces",
            "scope": 31661,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 31294,
              "keyType": {
                "id": 31292,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1227:7:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1219:27:35",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 31293,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1238:7:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 31299,
            "nodeType": "VariableDeclaration",
            "src": "1323:35:35",
            "baseFunctions": [
              33575
            ],
            "constant": false,
            "documentation": {
              "id": 31296,
              "nodeType": "StructuredDocumentation",
              "src": "1266:52:35",
              "text": "@dev hash commitment to the name/symbol/decimals"
            },
            "functionSelector": "4815fcb1",
            "mutability": "mutable",
            "name": "detailsHash",
            "overrides": {
              "id": 31298,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1338:8:35"
            },
            "scope": 31661,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 31297,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1323:7:35",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "id": 31303,
            "nodeType": "VariableDeclaration",
            "src": "1411:25:35",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 31661,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$48_storage",
              "typeString": "uint256[48]"
            },
            "typeName": {
              "baseType": {
                "id": 31300,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1411:7:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 31302,
              "length": {
                "hexValue": "3438",
                "id": 31301,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1419:2:35",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_48_by_1",
                  "typeString": "int_const 48"
                },
                "value": "48"
              },
              "nodeType": "ArrayTypeName",
              "src": "1411:11:35",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$48_storage_ptr",
                "typeString": "uint256[48]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 31313,
            "nodeType": "FunctionDefinition",
            "src": "1515:83:35",
            "body": {
              "id": 31312,
              "nodeType": "Block",
              "src": "1565:33:35",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 31309,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23067,
                      "src": "1575:14:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 31310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1575:16:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31311,
                  "nodeType": "ExpressionStatement",
                  "src": "1575:16:35"
                }
              ]
            },
            "baseFunctions": [
              33548
            ],
            "functionSelector": "8129fc1c",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31307,
                "modifierName": {
                  "id": 31306,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "1553:11:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1553:11:35"
              }
            ],
            "name": "initialize",
            "overrides": {
              "id": 31305,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1544:8:35"
            },
            "parameters": {
              "id": 31304,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1534:2:35"
            },
            "returnParameters": {
              "id": 31308,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1565:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31321,
            "nodeType": "EventDefinition",
            "src": "1645:118:35",
            "anonymous": false,
            "name": "UpdateDetails",
            "parameters": {
              "id": 31320,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31315,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "scope": 31321,
                  "src": "1674:19:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 31314,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1674:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31317,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 31321,
                  "src": "1703:21:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 31316,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1703:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31319,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 31321,
                  "src": "1734:22:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 31318,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "1734:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1664:98:35"
            }
          },
          {
            "id": 31338,
            "nodeType": "FunctionDefinition",
            "src": "2237:108:35",
            "body": {
              "id": 31337,
              "nodeType": "Block",
              "src": "2309:36:35",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31333,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31324,
                        "src": "2325:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31334,
                        "name": "_amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31326,
                        "src": "2332:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 31332,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43167,
                      "src": "2319:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 31335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2319:19:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31336,
                  "nodeType": "ExpressionStatement",
                  "src": "2319:19:35"
                }
              ]
            },
            "baseFunctions": [
              33582
            ],
            "documentation": {
              "id": 31322,
              "nodeType": "StructuredDocumentation",
              "src": "1822:410:35",
              "text": " @notice Destroys `_amnt` tokens from `_from`, reducing the\n total supply.\n @dev Emits a {Transfer} event with `to` set to the zero address.\n Requirements:\n - `_from` cannot be the zero address.\n - `_from` must have at least `_amnt` tokens.\n @param _from The address from which to destroy the tokens\n @param _amnt The amount of tokens to be destroyed"
            },
            "functionSelector": "9dc29fac",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31330,
                "modifierName": {
                  "id": 31329,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "2299:9:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2299:9:35"
              }
            ],
            "name": "burn",
            "overrides": {
              "id": 31328,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2290:8:35"
            },
            "parameters": {
              "id": 31327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31324,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 31338,
                  "src": "2251:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31323,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2251:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31326,
                  "mutability": "mutable",
                  "name": "_amnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 31338,
                  "src": "2266:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31325,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2266:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2250:30:35"
            },
            "returnParameters": {
              "id": 31331,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2309:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 31355,
            "nodeType": "FunctionDefinition",
            "src": "2694:104:35",
            "body": {
              "id": 31354,
              "nodeType": "Block",
              "src": "2764:34:35",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31350,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31341,
                        "src": "2780:3:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31351,
                        "name": "_amnt",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31343,
                        "src": "2785:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 31349,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43111,
                      "src": "2774:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 31352,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2774:17:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31353,
                  "nodeType": "ExpressionStatement",
                  "src": "2774:17:35"
                }
              ]
            },
            "baseFunctions": [
              33589
            ],
            "documentation": {
              "id": 31339,
              "nodeType": "StructuredDocumentation",
              "src": "2351:338:35",
              "text": "@notice Creates `_amnt` tokens and assigns them to `_to`, increasing\n the total supply.\n @dev Emits a {Transfer} event with `from` set to the zero address.\n Requirements:\n - `to` cannot be the zero address.\n @param _to The destination address\n @param _amnt The amount of tokens to be minted"
            },
            "functionSelector": "40c10f19",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31347,
                "modifierName": {
                  "id": 31346,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "2754:9:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2754:9:35"
              }
            ],
            "name": "mint",
            "overrides": {
              "id": 31345,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2745:8:35"
            },
            "parameters": {
              "id": 31344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31341,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 31355,
                  "src": "2708:11:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31340,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2708:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31343,
                  "mutability": "mutable",
                  "name": "_amnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 31355,
                  "src": "2721:13:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2721:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2707:28:35"
            },
            "returnParameters": {
              "id": 31348,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2764:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 31374,
            "nodeType": "FunctionDefinition",
            "src": "2930:174:35",
            "body": {
              "id": 31373,
              "nodeType": "Block",
              "src": "3004:100:35",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 31366,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 31364,
                      "name": "detailsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31299,
                      "src": "3018:11:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "id": 31365,
                      "name": "_detailsHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31358,
                      "src": "3033:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "3018:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 31372,
                  "nodeType": "IfStatement",
                  "src": "3014:84:35",
                  "trueBody": {
                    "id": 31371,
                    "nodeType": "Block",
                    "src": "3047:51:35",
                    "statements": [
                      {
                        "expression": {
                          "id": 31369,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 31367,
                            "name": "detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31299,
                            "src": "3061:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 31368,
                            "name": "_detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31358,
                            "src": "3075:12:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3061:26:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 31370,
                        "nodeType": "ExpressionStatement",
                        "src": "3061:26:35"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              33594
            ],
            "documentation": {
              "id": 31356,
              "nodeType": "StructuredDocumentation",
              "src": "2804:121:35",
              "text": "@notice allows the owner to set the details hash commitment.\n @param _detailsHash the new details hash."
            },
            "functionSelector": "cc2ab7c7",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31362,
                "modifierName": {
                  "id": 31361,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "2994:9:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2994:9:35"
              }
            ],
            "name": "setDetailsHash",
            "overrides": {
              "id": 31360,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2985:8:35"
            },
            "parameters": {
              "id": 31359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31358,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 31374,
                  "src": "2954:20:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31357,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2954:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2953:22:35"
            },
            "returnParameters": {
              "id": 31363,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3004:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 31453,
            "nodeType": "FunctionDefinition",
            "src": "3288:1074:35",
            "body": {
              "id": 31452,
              "nodeType": "Block",
              "src": "3430:932:35",
              "statements": [
                {
                  "assignments": [
                    31386
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31386,
                      "mutability": "mutable",
                      "name": "_isFirstDetails",
                      "nodeType": "VariableDeclaration",
                      "scope": 31452,
                      "src": "3440:20:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 31385,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3440:4:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31409,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 31408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 31403,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 31394,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 31389,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42811,
                                  "src": "3469:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Token_$42809_storage",
                                    "typeString": "struct ERC20.Token storage ref"
                                  }
                                },
                                "id": 31390,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "name",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 42804,
                                "src": "3469:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_storage",
                                  "typeString": "string storage ref"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_storage",
                                  "typeString": "string storage ref"
                                }
                              ],
                              "id": 31388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3463:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 31387,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "3463:5:35",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 31391,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3463:17:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes storage pointer"
                            }
                          },
                          "id": 31392,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3463:24:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 31393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3491:1:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3463:29:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 31402,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 31397,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42811,
                                  "src": "3514:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Token_$42809_storage",
                                    "typeString": "struct ERC20.Token storage ref"
                                  }
                                },
                                "id": 31398,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "symbol",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 42806,
                                "src": "3514:12:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_storage",
                                  "typeString": "string storage ref"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_storage",
                                  "typeString": "string storage ref"
                                }
                              ],
                              "id": 31396,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3508:5:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                "typeString": "type(bytes storage pointer)"
                              },
                              "typeName": {
                                "id": 31395,
                                "name": "bytes",
                                "nodeType": "ElementaryTypeName",
                                "src": "3508:5:35",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 31399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3508:19:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_storage_ptr",
                              "typeString": "bytes storage pointer"
                            }
                          },
                          "id": 31400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "3508:26:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 31401,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3538:1:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3508:31:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "3463:76:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "id": 31407,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 31404,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 42811,
                          "src": "3555:5:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Token_$42809_storage",
                            "typeString": "struct ERC20.Token storage ref"
                          }
                        },
                        "id": 31405,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "decimals",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 42808,
                        "src": "3555:14:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 31406,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3573:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "3555:19:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3463:111:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3440:134:35"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 31420,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 31411,
                          "name": "_isFirstDetails",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31386,
                          "src": "3834:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 31419,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 31414,
                                "name": "_newName",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31377,
                                "src": "3919:8:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "id": 31415,
                                "name": "_newSymbol",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31379,
                                "src": "3949:10:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                }
                              },
                              {
                                "id": 31416,
                                "name": "_newDecimals",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 31381,
                                "src": "3981:12:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_string_calldata_ptr",
                                  "typeString": "string calldata"
                                },
                                {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              ],
                              "expression": {
                                "id": 31412,
                                "name": "BridgeMessage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30301,
                                "src": "3869:13:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                                  "typeString": "type(library BridgeMessage)"
                                }
                              },
                              "id": 31413,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "getDetailsHash",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 29960,
                              "src": "3869:28:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$_t_bytes32_$",
                                "typeString": "function (string memory,string memory,uint8) pure returns (bytes32)"
                              }
                            },
                            "id": 31417,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3869:142:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 31418,
                            "name": "detailsHash",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31299,
                            "src": "4031:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3869:173:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "3834:208:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21636f6d6d69747465642064657461696c73",
                        "id": 31421,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4056:20:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_cf9eaec9863fe107523f05b63310d95cddaecc8e74b1e5f279506b6fbb786ee1",
                          "typeString": "literal_string \"!committed details\""
                        },
                        "value": "!committed details"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_cf9eaec9863fe107523f05b63310d95cddaecc8e74b1e5f279506b6fbb786ee1",
                          "typeString": "literal_string \"!committed details\""
                        }
                      ],
                      "id": 31410,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3813:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 31422,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3813:273:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31423,
                  "nodeType": "ExpressionStatement",
                  "src": "3813:273:35"
                },
                {
                  "expression": {
                    "id": 31428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 31424,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42811,
                        "src": "4150:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Token_$42809_storage",
                          "typeString": "struct ERC20.Token storage ref"
                        }
                      },
                      "id": 31426,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "name",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42804,
                      "src": "4150:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 31427,
                      "name": "_newName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31377,
                      "src": "4163:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "4150:21:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 31429,
                  "nodeType": "ExpressionStatement",
                  "src": "4150:21:35"
                },
                {
                  "expression": {
                    "id": 31434,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 31430,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42811,
                        "src": "4181:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Token_$42809_storage",
                          "typeString": "struct ERC20.Token storage ref"
                        }
                      },
                      "id": 31432,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "symbol",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42806,
                      "src": "4181:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 31433,
                      "name": "_newSymbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31379,
                      "src": "4196:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "4181:25:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 31435,
                  "nodeType": "ExpressionStatement",
                  "src": "4181:25:35"
                },
                {
                  "expression": {
                    "id": 31440,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 31436,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42811,
                        "src": "4216:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Token_$42809_storage",
                          "typeString": "struct ERC20.Token storage ref"
                        }
                      },
                      "id": 31438,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "decimals",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42808,
                      "src": "4216:14:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 31439,
                      "name": "_newDecimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31381,
                      "src": "4233:12:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "4216:29:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 31441,
                  "nodeType": "ExpressionStatement",
                  "src": "4216:29:35"
                },
                {
                  "condition": {
                    "id": 31443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4259:16:35",
                    "subExpression": {
                      "id": 31442,
                      "name": "_isFirstDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31386,
                      "src": "4260:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 31451,
                  "nodeType": "IfStatement",
                  "src": "4255:101:35",
                  "trueBody": {
                    "id": 31450,
                    "nodeType": "Block",
                    "src": "4277:79:35",
                    "statements": [
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 31445,
                              "name": "_newName",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31377,
                              "src": "4310:8:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            {
                              "id": 31446,
                              "name": "_newSymbol",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31379,
                              "src": "4320:10:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              }
                            },
                            {
                              "id": 31447,
                              "name": "_newDecimals",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31381,
                              "src": "4332:12:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              },
                              {
                                "typeIdentifier": "t_string_calldata_ptr",
                                "typeString": "string calldata"
                              },
                              {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            ],
                            "id": 31444,
                            "name": "UpdateDetails",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31321,
                            "src": "4296:13:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$returns$__$",
                              "typeString": "function (string memory,string memory,uint8)"
                            }
                          },
                          "id": 31448,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4296:49:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 31449,
                        "nodeType": "EmitStatement",
                        "src": "4291:54:35"
                      }
                    ]
                  }
                }
              ]
            },
            "baseFunctions": [
              33603
            ],
            "documentation": {
              "id": 31375,
              "nodeType": "StructuredDocumentation",
              "src": "3110:173:35",
              "text": " @notice Set the details of a token\n @param _newName The new name\n @param _newSymbol The new symbol\n @param _newDecimals The new decimals"
            },
            "functionSelector": "654935f4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "setDetails",
            "overrides": {
              "id": 31383,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3421:8:35"
            },
            "parameters": {
              "id": 31382,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31377,
                  "mutability": "mutable",
                  "name": "_newName",
                  "nodeType": "VariableDeclaration",
                  "scope": 31453,
                  "src": "3317:24:35",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 31376,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3317:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31379,
                  "mutability": "mutable",
                  "name": "_newSymbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 31453,
                  "src": "3351:26:35",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 31378,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3351:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31381,
                  "mutability": "mutable",
                  "name": "_newDecimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 31453,
                  "src": "3387:18:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 31380,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3387:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3307:104:35"
            },
            "returnParameters": {
              "id": 31384,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3430:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 31552,
            "nodeType": "FunctionDefinition",
            "src": "5026:1048:35",
            "body": {
              "id": 31551,
              "nodeType": "Block",
              "src": "5216:858:35",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 31475,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 31472,
                            "name": "block",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -4,
                            "src": "5234:5:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_block",
                              "typeString": "block"
                            }
                          },
                          "id": 31473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "timestamp",
                          "nodeType": "MemberAccess",
                          "src": "5234:15:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 31474,
                          "name": "_deadline",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31462,
                          "src": "5253:9:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5234:28:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332305065726d69743a206578706972656420646561646c696e65",
                        "id": 31476,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5264:31:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd",
                          "typeString": "literal_string \"ERC20Permit: expired deadline\""
                        },
                        "value": "ERC20Permit: expired deadline"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3e89525a63fb9c966b61cf8f5305156de8420bc773a2b60828a2f32c3c5797bd",
                          "typeString": "literal_string \"ERC20Permit: expired deadline\""
                        }
                      ],
                      "id": 31471,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5226:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 31477,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5226:70:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31478,
                  "nodeType": "ExpressionStatement",
                  "src": "5226:70:35"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 31485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 31480,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31456,
                          "src": "5314:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 31483,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5332:1:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 31482,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5324:7:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 31481,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5324:7:35",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 31484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5324:10:35",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "5314:20:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332305065726d69743a206f776e6572207a65726f2061646472657373",
                        "id": 31486,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5336:33:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_be69ca738c1c073c48461bf9e05ac5a55afb349edef29d3077ffc4f5743a1034",
                          "typeString": "literal_string \"ERC20Permit: owner zero address\""
                        },
                        "value": "ERC20Permit: owner zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_be69ca738c1c073c48461bf9e05ac5a55afb349edef29d3077ffc4f5743a1034",
                          "typeString": "literal_string \"ERC20Permit: owner zero address\""
                        }
                      ],
                      "id": 31479,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5306:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 31487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5306:64:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31488,
                  "nodeType": "ExpressionStatement",
                  "src": "5306:64:35"
                },
                {
                  "assignments": [
                    31490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31490,
                      "mutability": "mutable",
                      "name": "_nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 31551,
                      "src": "5380:14:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 31489,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5380:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31494,
                  "initialValue": {
                    "baseExpression": {
                      "id": 31491,
                      "name": "nonces",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31295,
                      "src": "5397:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 31493,
                    "indexExpression": {
                      "id": 31492,
                      "name": "_owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31456,
                      "src": "5404:6:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5397:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5380:31:35"
                },
                {
                  "assignments": [
                    31496
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31496,
                      "mutability": "mutable",
                      "name": "_hashStruct",
                      "nodeType": "VariableDeclaration",
                      "scope": 31551,
                      "src": "5421:19:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 31495,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5421:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31508,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 31500,
                            "name": "_PERMIT_TYPEHASH",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31277,
                            "src": "5494:16:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 31501,
                            "name": "_owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31456,
                            "src": "5528:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 31502,
                            "name": "_spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31458,
                            "src": "5552:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 31503,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31460,
                            "src": "5578:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 31504,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31490,
                            "src": "5602:6:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "id": 31505,
                            "name": "_deadline",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31462,
                            "src": "5626:9:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 31498,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "5466:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 31499,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "5466:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 31506,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5466:183:35",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 31497,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "5443:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 31507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5443:216:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5421:238:35"
                },
                {
                  "assignments": [
                    31510
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31510,
                      "mutability": "mutable",
                      "name": "_digest",
                      "nodeType": "VariableDeclaration",
                      "scope": 31551,
                      "src": "5669:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 31509,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5669:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31520,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 31514,
                            "name": "_EIP712_PREFIX_AND_VERSION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31291,
                            "src": "5744:26:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 31515,
                              "name": "domainSeparator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 31635,
                              "src": "5788:15:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                                "typeString": "function () view returns (bytes32)"
                              }
                            },
                            "id": 31516,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5788:17:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 31517,
                            "name": "_hashStruct",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31496,
                            "src": "5823:11:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "expression": {
                            "id": 31512,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "5710:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 31513,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "src": "5710:16:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 31518,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5710:138:35",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 31511,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "5687:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 31519,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5687:171:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5669:189:35"
                },
                {
                  "assignments": [
                    31522
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31522,
                      "mutability": "mutable",
                      "name": "_signer",
                      "nodeType": "VariableDeclaration",
                      "scope": 31551,
                      "src": "5868:15:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 31521,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "5868:7:35",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31529,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 31524,
                        "name": "_digest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31510,
                        "src": "5896:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 31525,
                        "name": "_v",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31464,
                        "src": "5905:2:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 31526,
                        "name": "_r",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31466,
                        "src": "5909:2:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 31527,
                        "name": "_s",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31468,
                        "src": "5913:2:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 31523,
                      "name": "ecrecover",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -6,
                      "src": "5886:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
                      }
                    },
                    "id": 31528,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5886:30:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5868:48:35"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 31533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 31531,
                          "name": "_signer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31522,
                          "src": "5934:7:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 31532,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 31456,
                          "src": "5945:6:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5934:17:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332305065726d69743a20696e76616c6964207369676e6174757265",
                        "id": 31534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5953:32:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124",
                          "typeString": "literal_string \"ERC20Permit: invalid signature\""
                        },
                        "value": "ERC20Permit: invalid signature"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_94ca1ab58dfda790a1782ffbb0c0a140ec51d4148dbeecc6c39e37b25ff4b124",
                          "typeString": "literal_string \"ERC20Permit: invalid signature\""
                        }
                      ],
                      "id": 31530,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5926:7:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 31535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5926:60:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31536,
                  "nodeType": "ExpressionStatement",
                  "src": "5926:60:35"
                },
                {
                  "expression": {
                    "id": 31543,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 31537,
                        "name": "nonces",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31295,
                        "src": "5996:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 31539,
                      "indexExpression": {
                        "id": 31538,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31456,
                        "src": "6003:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5996:14:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 31542,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 31540,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31490,
                        "src": "6013:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 31541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6022:1:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "6013:10:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5996:27:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 31544,
                  "nodeType": "ExpressionStatement",
                  "src": "5996:27:35"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31546,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31456,
                        "src": "6042:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31547,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31458,
                        "src": "6050:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 31548,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31460,
                        "src": "6060:6:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 31545,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43212,
                      "src": "6033:8:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 31549,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6033:34:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31550,
                  "nodeType": "ExpressionStatement",
                  "src": "6033:34:35"
                }
              ]
            },
            "documentation": {
              "id": 31454,
              "nodeType": "StructuredDocumentation",
              "src": "4368:653:35",
              "text": " @notice Sets approval from owner to spender to value\n as long as deadline has not passed\n by submitting a valid signature from owner\n Uses EIP 712 structured data hashing & signing\n https://eips.ethereum.org/EIPS/eip-712\n @param _owner The account setting approval & signing the message\n @param _spender The account receiving approval to spend owner's tokens\n @param _value The amount to set approval for\n @param _deadline The timestamp before which the signature must be submitted\n @param _v ECDSA signature v\n @param _r ECDSA signature r\n @param _s ECDSA signature s"
            },
            "functionSelector": "d505accf",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "permit",
            "parameters": {
              "id": 31469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31456,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5051:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31455,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5051:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31458,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5075:16:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31457,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5075:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31460,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5101:14:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31459,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5101:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31462,
                  "mutability": "mutable",
                  "name": "_deadline",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5125:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31461,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5125:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31464,
                  "mutability": "mutable",
                  "name": "_v",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5152:8:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 31463,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5152:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31466,
                  "mutability": "mutable",
                  "name": "_r",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5170:10:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31465,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5170:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 31468,
                  "mutability": "mutable",
                  "name": "_s",
                  "nodeType": "VariableDeclaration",
                  "scope": 31552,
                  "src": "5190:10:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31467,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5190:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5041:165:35"
            },
            "returnParameters": {
              "id": 31470,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5216:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 31569,
            "nodeType": "FunctionDefinition",
            "src": "6191:182:35",
            "body": {
              "id": 31568,
              "nodeType": "Block",
              "src": "6324:49:35",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31565,
                        "name": "_account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31555,
                        "src": "6357:8:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 31563,
                        "name": "ERC20",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43237,
                        "src": "6341:5:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ERC20_$43237_$",
                          "typeString": "type(contract ERC20)"
                        }
                      },
                      "id": 31564,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 42972,
                      "src": "6341:15:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 31566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6341:25:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 31562,
                  "id": 31567,
                  "nodeType": "Return",
                  "src": "6334:32:35"
                }
              ]
            },
            "baseFunctions": [
              33560,
              42972
            ],
            "documentation": {
              "id": 31553,
              "nodeType": "StructuredDocumentation",
              "src": "6131:55:35",
              "text": " @dev silence the compiler being dumb"
            },
            "functionSelector": "70a08231",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "overrides": {
              "id": 31559,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 31557,
                  "name": "IBridgeToken",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 33609,
                  "src": "6273:12:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                    "typeString": "contract IBridgeToken"
                  }
                },
                {
                  "id": 31558,
                  "name": "ERC20",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 43237,
                  "src": "6287:5:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$43237",
                    "typeString": "contract ERC20"
                  }
                }
              ],
              "src": "6264:29:35"
            },
            "parameters": {
              "id": 31556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31555,
                  "mutability": "mutable",
                  "name": "_account",
                  "nodeType": "VariableDeclaration",
                  "scope": 31569,
                  "src": "6210:16:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31554,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6210:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6209:18:35"
            },
            "returnParameters": {
              "id": 31562,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31561,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 31569,
                  "src": "6311:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 31560,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6311:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6310:9:35"
            },
            "scope": 31661,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31580,
            "nodeType": "FunctionDefinition",
            "src": "6438:95:35",
            "body": {
              "id": 31579,
              "nodeType": "Block",
              "src": "6499:34:35",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 31576,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42811,
                      "src": "6516:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Token_$42809_storage",
                        "typeString": "struct ERC20.Token storage ref"
                      }
                    },
                    "id": 31577,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "name",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 42804,
                    "src": "6516:10:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 31575,
                  "id": 31578,
                  "nodeType": "Return",
                  "src": "6509:17:35"
                }
              ]
            },
            "baseFunctions": [
              33553
            ],
            "documentation": {
              "id": 31570,
              "nodeType": "StructuredDocumentation",
              "src": "6379:54:35",
              "text": " @dev Returns the name of the token."
            },
            "functionSelector": "06fdde03",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "overrides": {
              "id": 31572,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6466:8:35"
            },
            "parameters": {
              "id": 31571,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6451:2:35"
            },
            "returnParameters": {
              "id": 31575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31574,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 31580,
                  "src": "6484:13:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 31573,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6484:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6483:15:35"
            },
            "scope": 31661,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31591,
            "nodeType": "FunctionDefinition",
            "src": "6646:99:35",
            "body": {
              "id": 31590,
              "nodeType": "Block",
              "src": "6709:36:35",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 31587,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42811,
                      "src": "6726:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Token_$42809_storage",
                        "typeString": "struct ERC20.Token storage ref"
                      }
                    },
                    "id": 31588,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "symbol",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 42806,
                    "src": "6726:12:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 31586,
                  "id": 31589,
                  "nodeType": "Return",
                  "src": "6719:19:35"
                }
              ]
            },
            "baseFunctions": [
              33565
            ],
            "documentation": {
              "id": 31581,
              "nodeType": "StructuredDocumentation",
              "src": "6539:102:35",
              "text": " @dev Returns the symbol of the token, usually a shorter version of the\n name."
            },
            "functionSelector": "95d89b41",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "overrides": {
              "id": 31583,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6676:8:35"
            },
            "parameters": {
              "id": 31582,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6661:2:35"
            },
            "returnParameters": {
              "id": 31586,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31585,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 31591,
                  "src": "6694:13:35",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 31584,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "6694:6:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6693:15:35"
            },
            "scope": 31661,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31602,
            "nodeType": "FunctionDefinition",
            "src": "7354:95:35",
            "body": {
              "id": 31601,
              "nodeType": "Block",
              "src": "7411:38:35",
              "statements": [
                {
                  "expression": {
                    "expression": {
                      "id": 31598,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42811,
                      "src": "7428:5:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Token_$42809_storage",
                        "typeString": "struct ERC20.Token storage ref"
                      }
                    },
                    "id": 31599,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "decimals",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 42808,
                    "src": "7428:14:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 31597,
                  "id": 31600,
                  "nodeType": "Return",
                  "src": "7421:21:35"
                }
              ]
            },
            "baseFunctions": [
              33570
            ],
            "documentation": {
              "id": 31592,
              "nodeType": "StructuredDocumentation",
              "src": "6751:598:35",
              "text": " @dev Returns the number of decimals used to get its user representation.\n For example, if `decimals` equals `2`, a balance of `505` tokens should\n be displayed to a user as `5,05` (`505 / 10 ** 2`).\n Tokens usually opt for a value of 18, imitating the relationship between\n Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n called.\n NOTE: This information is only used for _display_ purposes: it in\n no way affects any of the arithmetic of the contract, including\n {IERC20-balanceOf} and {IERC20-transfer}."
            },
            "functionSelector": "313ce567",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "overrides": {
              "id": 31594,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7386:8:35"
            },
            "parameters": {
              "id": 31593,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7371:2:35"
            },
            "returnParameters": {
              "id": 31597,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31596,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 31602,
                  "src": "7404:5:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 31595,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "7404:5:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7403:7:35"
            },
            "scope": 31661,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31635,
            "nodeType": "FunctionDefinition",
            "src": "7561:582:35",
            "body": {
              "id": 31634,
              "nodeType": "Block",
              "src": "7618:525:35",
              "statements": [
                {
                  "assignments": [
                    31609
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 31609,
                      "mutability": "mutable",
                      "name": "_chainId",
                      "nodeType": "VariableDeclaration",
                      "scope": 31634,
                      "src": "7628:16:35",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 31608,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7628:7:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 31610,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7628:16:35"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "7663:45:35",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "7677:21:35",
                        "value": {
                          "arguments": [],
                          "functionName": {
                            "name": "chainid",
                            "nodeType": "YulIdentifier",
                            "src": "7689:7:35"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7689:9:35"
                        },
                        "variableNames": [
                          {
                            "name": "_chainId",
                            "nodeType": "YulIdentifier",
                            "src": "7677:8:35"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 31609,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "7677:8:35",
                      "valueSize": 1
                    }
                  ],
                  "id": 31611,
                  "nodeType": "InlineAssembly",
                  "src": "7654:54:35"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "hexValue": "454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
                                "id": 31616,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "7830:84:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                  "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                                },
                                "value": "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f",
                                  "typeString": "literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""
                                }
                              ],
                              "id": 31615,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "7795:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 31617,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7795:141:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 31621,
                                      "name": "token",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 42811,
                                      "src": "7974:5:35",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Token_$42809_storage",
                                        "typeString": "struct ERC20.Token storage ref"
                                      }
                                    },
                                    "id": 31622,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "name",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 42804,
                                    "src": "7974:10:35",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_string_storage",
                                      "typeString": "string storage ref"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_string_storage",
                                      "typeString": "string storage ref"
                                    }
                                  ],
                                  "id": 31620,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7968:5:35",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                                    "typeString": "type(bytes storage pointer)"
                                  },
                                  "typeName": {
                                    "id": 31619,
                                    "name": "bytes",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7968:5:35",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 31623,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7968:17:35",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_storage_ptr",
                                  "typeString": "bytes storage pointer"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_storage_ptr",
                                  "typeString": "bytes storage pointer"
                                }
                              ],
                              "id": 31618,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -8,
                              "src": "7958:9:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                                "typeString": "function (bytes memory) pure returns (bytes32)"
                              }
                            },
                            "id": 31624,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7958:28:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 31625,
                            "name": "_EIP712_STRUCTURED_DATA_VERSION",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31285,
                            "src": "8008:31:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 31626,
                            "name": "_chainId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 31609,
                            "src": "8061:8:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "arguments": [
                              {
                                "id": 31629,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "8099:4:35",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_BridgeToken_$31661",
                                  "typeString": "contract BridgeToken"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_BridgeToken_$31661",
                                  "typeString": "contract BridgeToken"
                                }
                              ],
                              "id": 31628,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "8091:7:35",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 31627,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "8091:7:35",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 31630,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8091:13:35",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 31613,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "7763:3:35",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 31614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "7763:10:35",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 31631,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7763:359:35",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 31612,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "7736:9:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 31632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7736:400:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 31607,
                  "id": 31633,
                  "nodeType": "Return",
                  "src": "7717:419:35"
                }
              ]
            },
            "documentation": {
              "id": 31603,
              "nodeType": "StructuredDocumentation",
              "src": "7455:101:35",
              "text": " @dev This is ALWAYS calculated at runtime\n because the token name may change"
            },
            "functionSelector": "f698da25",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "domainSeparator",
            "parameters": {
              "id": 31604,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7585:2:35"
            },
            "returnParameters": {
              "id": 31607,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31606,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 31635,
                  "src": "7609:7:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 31605,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7609:7:35",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7608:9:35"
            },
            "scope": 31661,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31652,
            "nodeType": "FunctionDefinition",
            "src": "8190:198:35",
            "body": {
              "id": 31651,
              "nodeType": "Block",
              "src": "8324:64:35",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 31648,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 31637,
                        "src": "8371:9:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 31645,
                        "name": "OwnableUpgradeable",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23168,
                        "src": "8334:18:35",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_OwnableUpgradeable_$23168_$",
                          "typeString": "type(contract OwnableUpgradeable)"
                        }
                      },
                      "id": 31647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferOwnership",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 23163,
                      "src": "8334:36:35",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 31649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8334:47:35",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 31650,
                  "nodeType": "ExpressionStatement",
                  "src": "8334:47:35"
                }
              ]
            },
            "baseFunctions": [
              23163,
              33608
            ],
            "functionSelector": "f2fde38b",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31643,
                "modifierName": {
                  "id": 31642,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8310:9:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8310:9:35"
              }
            ],
            "name": "transferOwnership",
            "overrides": {
              "id": 31641,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 31639,
                  "name": "IBridgeToken",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 33609,
                  "src": "8268:12:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                    "typeString": "contract IBridgeToken"
                  }
                },
                {
                  "id": 31640,
                  "name": "OwnableUpgradeable",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 23168,
                  "src": "8282:18:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                    "typeString": "contract OwnableUpgradeable"
                  }
                }
              ],
              "src": "8259:42:35"
            },
            "parameters": {
              "id": 31638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 31637,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nodeType": "VariableDeclaration",
                  "scope": 31652,
                  "src": "8217:17:35",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 31636,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8217:7:35",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8216:19:35"
            },
            "returnParameters": {
              "id": 31644,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8324:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 31660,
            "nodeType": "FunctionDefinition",
            "src": "8581:84:35",
            "body": {
              "id": 31659,
              "nodeType": "Block",
              "src": "8636:29:35",
              "statements": []
            },
            "baseFunctions": [
              23135
            ],
            "documentation": {
              "id": 31653,
              "nodeType": "StructuredDocumentation",
              "src": "8394:182:35",
              "text": " @dev should be impossible to renounce ownership;\n we override OpenZeppelin OwnableUpgradeable's\n implementation of renounceOwnership to make it a no-op"
            },
            "functionSelector": "715018a6",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 31657,
                "modifierName": {
                  "id": 31656,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "8626:9:35",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8626:9:35"
              }
            ],
            "name": "renounceOwnership",
            "overrides": {
              "id": 31655,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8617:8:35"
            },
            "parameters": {
              "id": 31654,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8607:2:35"
            },
            "returnParameters": {
              "id": 31658,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8636:0:35"
            },
            "scope": 31661,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 31265,
              "name": "Version0",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 44622,
              "src": "610:8:35",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Version0_$44622",
                "typeString": "contract Version0"
              }
            },
            "id": 31266,
            "nodeType": "InheritanceSpecifier",
            "src": "610:8:35"
          },
          {
            "baseName": {
              "id": 31267,
              "name": "IBridgeToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 33609,
              "src": "620:12:35",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IBridgeToken_$33609",
                "typeString": "contract IBridgeToken"
              }
            },
            "id": 31268,
            "nodeType": "InheritanceSpecifier",
            "src": "620:12:35"
          },
          {
            "baseName": {
              "id": 31269,
              "name": "OwnableUpgradeable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 23168,
              "src": "634:18:35",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeable_$23168",
                "typeString": "contract OwnableUpgradeable"
              }
            },
            "id": 31270,
            "nodeType": "InheritanceSpecifier",
            "src": "634:18:35"
          },
          {
            "baseName": {
              "id": 31271,
              "name": "ERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 43237,
              "src": "654:5:35",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC20_$43237",
                "typeString": "contract ERC20"
              }
            },
            "id": 31272,
            "nodeType": "InheritanceSpecifier",
            "src": "654:5:35"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          27517,
          33609,
          43237,
          44622
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          31661,
          43237,
          27517,
          23168,
          25131,
          23676,
          33609,
          44622
        ],
        "name": "BridgeToken",
        "scope": 31662
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 35
}