{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC777Upgradeable",
  "sourceName": "@openzeppelin-upgradeable/contracts/token/ERC777/ERC777Upgradeable.sol",
  "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": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "AuthorizedOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Burned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Minted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "RevokedOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Sent",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "holder",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "authorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "granularity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "isOperatorFor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "operatorBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "operatorSend",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "revokeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "send",
      "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": "holder",
          "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b506117ab806100206000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57600080fd5b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857600080fd5b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157600080fd5b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b60405161013091906111db565b60405180910390f35b610141610312565b6040516101309190611275565b61016161015c3660046112a0565b61039b565b6040519015158152602001610130565b6034545b604051908152602001610130565b6101616101913660046112cc565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba3660046113b0565b6104ea565b005b6101756101cf366004611443565b6001600160a01b031660009081526033602052604090205490565b6101bf6101f8366004611443565b610526565b610141610644565b6101bf610213366004611460565b610653565b6101616102263660046112a0565b610676565b6101616102393660046114b9565b610729565b61017561024c3660046114b9565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b6101bf610285366004611443565b6107cb565b6101bf6102983660046114f2565b6108e7565b6101bf6102ab366004611572565b61091f565b6060603780548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b606060358054610321906115b9565b80601f016020809104026020016040519081016040528092919081815260200182805461034d906115b9565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a981858561093e565b5060019392505050565b60006001600160a01b0383166103e45760405162461bcd60e51b81526004016103db906115f4565b60405180910390fd5b6001600160a01b0384166104495760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b600033905061047a818686866040518060200160405280600081525060405180602001604052806000815250610a65565b610485858285610b8d565b6104b1818686866040518060200160405280600081525060405180602001604052806000815250610c19565b6104df8186868660405180602001604052806000815250604051806020016040528060008152506000610d7f565b506001949350505050565b6104f43386610729565b6105105760405162461bcd60e51b81526004016103db90611638565b61051f85858585856001610f44565b5050505050565b336001600160a01b038216141561058b5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103db565b6001600160a01b03811660009081526038602052604090205460ff16156105dc57336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff1916905561060b565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b606060368054610321906115b9565b61067133848484604051806020016040528060008152506001610f44565b505050565b60006001600160a01b03831661069e5760405162461bcd60e51b81526004016103db906115f4565b60003390506106cf818286866040518060200160405280600081525060405180602001604052806000815250610a65565b6106fb818286866040518060200160405280600081525060405180602001604052806000815250610c19565b6103a98182868660405180602001604052806000815250604051806020016040528060008152506000610d7f565b6000816001600160a01b0316836001600160a01b0316148061079457506001600160a01b03831660009081526038602052604090205460ff16801561079457506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b806107c457506001600160a01b0380831660009081526039602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b03811633141561082e5760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103db565b6001600160a01b03811660009081526038602052604090205460ff161561088257336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556108ae565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b6108f13385610729565b61090d5760405162461bcd60e51b81526004016103db90611638565b61091984848484611027565b50505050565b61093a33838360405180602001604052806000815250611027565b5050565b6001600160a01b0383166109a25760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103db565b6001600160a01b038216610a045760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103db565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611684565b90506001600160a01b03811615610b8457604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610b51908a908a908a908a908a908a906004016116a1565b600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038381166000908152603b602090815260408083209386168352929052205460001981146109195781811015610c0c5760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e6365000060448201526064016103db565b610919848484840361093e565b6001600160a01b03851660009081526033602052604090205483811015610c925760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103db565b6001600160a01b03808716600090815260336020526040808220878503905591871681529081208054869290610cc9908490611711565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d2193929190611729565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d6e91815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e249190611684565b90506001600160a01b03811615610ea0576040516223de2960e01b81526001600160a01b038216906223de2990610e69908b908b908b908b908b908b906004016116a1565b600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b50505050610f3a565b8115610f3a576001600160a01b0386163b15610f3a5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103db565b5050505050505050565b6001600160a01b038616610fa55760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b6001600160a01b038516610ffb5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103db565b3361100a818888888888610a65565b611018818888888888610c19565b610b8481888888888888610d7f565b6001600160a01b0384166110885760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b3361109881866000878787610a65565b6001600160a01b0385166000908152603360205260409020548481101561110d5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103db565b6001600160a01b038616600090815260336020526040812086830390556034805487929061113c90849061175e565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a409887878760405161118a93929190611729565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561121c5783516001600160a01b0316835292840192918401916001016111f7565b50909695505050505050565b6000815180845260005b8181101561124e57602081850181015186830182015201611232565b81811115611260576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006107c46020830184611228565b6001600160a01b038116811461129d57600080fd5b50565b600080604083850312156112b357600080fd5b82356112be81611288565b946020939093013593505050565b6000806000606084860312156112e157600080fd5b83356112ec81611288565b925060208401356112fc81611288565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261133457600080fd5b813567ffffffffffffffff8082111561134f5761134f61130d565b604051601f8301601f19908116603f011681019082821181831017156113775761137761130d565b8160405283815286602085880101111561139057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113c857600080fd5b85356113d381611288565b945060208601356113e381611288565b935060408601359250606086013567ffffffffffffffff8082111561140757600080fd5b61141389838a01611323565b9350608088013591508082111561142957600080fd5b5061143688828901611323565b9150509295509295909350565b60006020828403121561145557600080fd5b81356107c481611288565b60008060006060848603121561147557600080fd5b833561148081611288565b925060208401359150604084013567ffffffffffffffff8111156114a357600080fd5b6114af86828701611323565b9150509250925092565b600080604083850312156114cc57600080fd5b82356114d781611288565b915060208301356114e781611288565b809150509250929050565b6000806000806080858703121561150857600080fd5b843561151381611288565b935060208501359250604085013567ffffffffffffffff8082111561153757600080fd5b61154388838901611323565b9350606087013591508082111561155957600080fd5b5061156687828801611323565b91505092959194509250565b6000806040838503121561158557600080fd5b82359150602083013567ffffffffffffffff8111156115a357600080fd5b6115af85828601611323565b9150509250929050565b600181811c908216806115cd57607f821691505b602082108114156115ee57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b60006020828403121561169657600080fd5b81516107c481611288565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906116dc90830185611228565b82810360a08401526116ee8185611228565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611724576117246116fb565b500190565b8381526060602082015260006117426060830185611228565b82810360408401526117548185611228565b9695505050505050565b600082821015611770576117706116fb565b50039056fea2646970667358221220b6f53d9c0629291fed298eaea227cc7a6a4ec0b80d8f90a6a1667db1ae7e4a0b64736f6c634300080b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57600080fd5b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857600080fd5b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157600080fd5b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b60405161013091906111db565b60405180910390f35b610141610312565b6040516101309190611275565b61016161015c3660046112a0565b61039b565b6040519015158152602001610130565b6034545b604051908152602001610130565b6101616101913660046112cc565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba3660046113b0565b6104ea565b005b6101756101cf366004611443565b6001600160a01b031660009081526033602052604090205490565b6101bf6101f8366004611443565b610526565b610141610644565b6101bf610213366004611460565b610653565b6101616102263660046112a0565b610676565b6101616102393660046114b9565b610729565b61017561024c3660046114b9565b6001600160a01b039182166000908152603b6020908152604080832093909416825291909152205490565b6101bf610285366004611443565b6107cb565b6101bf6102983660046114f2565b6108e7565b6101bf6102ab366004611572565b61091f565b6060603780548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b606060358054610321906115b9565b80601f016020809104026020016040519081016040528092919081815260200182805461034d906115b9565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a981858561093e565b5060019392505050565b60006001600160a01b0383166103e45760405162461bcd60e51b81526004016103db906115f4565b60405180910390fd5b6001600160a01b0384166104495760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b60648201526084016103db565b600033905061047a818686866040518060200160405280600081525060405180602001604052806000815250610a65565b610485858285610b8d565b6104b1818686866040518060200160405280600081525060405180602001604052806000815250610c19565b6104df8186868660405180602001604052806000815250604051806020016040528060008152506000610d7f565b506001949350505050565b6104f43386610729565b6105105760405162461bcd60e51b81526004016103db90611638565b61051f85858585856001610f44565b5050505050565b336001600160a01b038216141561058b5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b60648201526084016103db565b6001600160a01b03811660009081526038602052604090205460ff16156105dc57336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff1916905561060b565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b606060368054610321906115b9565b61067133848484604051806020016040528060008152506001610f44565b505050565b60006001600160a01b03831661069e5760405162461bcd60e51b81526004016103db906115f4565b60003390506106cf818286866040518060200160405280600081525060405180602001604052806000815250610a65565b6106fb818286866040518060200160405280600081525060405180602001604052806000815250610c19565b6103a98182868660405180602001604052806000815250604051806020016040528060008152506000610d7f565b6000816001600160a01b0316836001600160a01b0316148061079457506001600160a01b03831660009081526038602052604090205460ff16801561079457506001600160a01b038083166000908152603a602090815260408083209387168352929052205460ff16155b806107c457506001600160a01b0380831660009081526039602090815260408083209387168352929052205460ff165b9392505050565b6001600160a01b03811633141561082e5760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b60648201526084016103db565b6001600160a01b03811660009081526038602052604090205460ff161561088257336000908152603a602090815260408083206001600160a01b03851684529091529020805460ff191660011790556108ae565b3360009081526039602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b6108f13385610729565b61090d5760405162461bcd60e51b81526004016103db90611638565b61091984848484611027565b50505050565b61093a33838360405180602001604052806000815250611027565b5050565b6001600160a01b0383166109a25760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103db565b6001600160a01b038216610a045760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103db565b6001600160a01b038381166000818152603b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611684565b90506001600160a01b03811615610b8457604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610b51908a908a908a908a908a908a906004016116a1565b600060405180830381600087803b158015610b6b57600080fd5b505af1158015610b7f573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038381166000908152603b602090815260408083209386168352929052205460001981146109195781811015610c0c5760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e6365000060448201526064016103db565b610919848484840361093e565b6001600160a01b03851660009081526033602052604090205483811015610c925760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b60648201526084016103db565b6001600160a01b03808716600090815260336020526040808220878503905591871681529081208054869290610cc9908490611711565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610d2193929190611729565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610d6e91815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610e00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e249190611684565b90506001600160a01b03811615610ea0576040516223de2960e01b81526001600160a01b038216906223de2990610e69908b908b908b908b908b908b906004016116a1565b600060405180830381600087803b158015610e8357600080fd5b505af1158015610e97573d6000803e3d6000fd5b50505050610f3a565b8115610f3a576001600160a01b0386163b15610f3a5760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a4016103db565b5050505050505050565b6001600160a01b038616610fa55760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b6001600160a01b038516610ffb5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f206164647265737360448201526064016103db565b3361100a818888888888610a65565b611018818888888888610c19565b610b8481888888888888610d7f565b6001600160a01b0384166110885760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b60648201526084016103db565b3361109881866000878787610a65565b6001600160a01b0385166000908152603360205260409020548481101561110d5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b60648201526084016103db565b6001600160a01b038616600090815260336020526040812086830390556034805487929061113c90849061175e565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a409887878760405161118a93929190611729565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561121c5783516001600160a01b0316835292840192918401916001016111f7565b50909695505050505050565b6000815180845260005b8181101561124e57602081850181015186830182015201611232565b81811115611260576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006107c46020830184611228565b6001600160a01b038116811461129d57600080fd5b50565b600080604083850312156112b357600080fd5b82356112be81611288565b946020939093013593505050565b6000806000606084860312156112e157600080fd5b83356112ec81611288565b925060208401356112fc81611288565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261133457600080fd5b813567ffffffffffffffff8082111561134f5761134f61130d565b604051601f8301601f19908116603f011681019082821181831017156113775761137761130d565b8160405283815286602085880101111561139057600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156113c857600080fd5b85356113d381611288565b945060208601356113e381611288565b935060408601359250606086013567ffffffffffffffff8082111561140757600080fd5b61141389838a01611323565b9350608088013591508082111561142957600080fd5b5061143688828901611323565b9150509295509295909350565b60006020828403121561145557600080fd5b81356107c481611288565b60008060006060848603121561147557600080fd5b833561148081611288565b925060208401359150604084013567ffffffffffffffff8111156114a357600080fd5b6114af86828701611323565b9150509250925092565b600080604083850312156114cc57600080fd5b82356114d781611288565b915060208301356114e781611288565b809150509250929050565b6000806000806080858703121561150857600080fd5b843561151381611288565b935060208501359250604085013567ffffffffffffffff8082111561153757600080fd5b61154388838901611323565b9350606087013591508082111561155957600080fd5b5061156687828801611323565b91505092959194509250565b6000806040838503121561158557600080fd5b82359150602083013567ffffffffffffffff8111156115a357600080fd5b6115af85828601611323565b9150509250929050565b600181811c908216806115cd57607f821691505b602082108114156115ee57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b60006020828403121561169657600080fd5b81516107c481611288565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906116dc90830185611228565b82810360a08401526116ee8185611228565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611724576117246116fb565b500190565b8381526060602082015260006117426060830185611228565b82810360408401526117548185611228565b9695505050505050565b600082821015611770576117706116fb565b50039056fea2646970667358221220b6f53d9c0629291fed298eaea227cc7a6a4ec0b80d8f90a6a1667db1ae7e4a0b64736f6c634300080b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
