{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC3525SlotEnumerableUpgradeableWithInit",
  "sourceName": "contracts/mocks/ERC3525BaseMockUpgradeableWithInit.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "decimals_",
          "type": "uint8"
        }
      ],
      "stateMutability": "payable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "ApprovalValue",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "metadataDescriptor",
          "type": "address"
        }
      ],
      "name": "SetMetadataDescriptor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_oldSlot",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_newSlot",
          "type": "uint256"
        }
      ],
      "name": "SlotChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_fromTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_toTokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "TransferValue",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "operator_",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator_",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "metadataDescriptor",
      "outputs": [
        {
          "internalType": "contract IERC3525MetadataDescriptorUpgradeable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data_",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator_",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved_",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index_",
          "type": "uint256"
        }
      ],
      "name": "slotByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "slotCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "slotOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slot_",
          "type": "uint256"
        }
      ],
      "name": "slotURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index_",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slot_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "index_",
          "type": "uint256"
        }
      ],
      "name": "tokenInSlotByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index_",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "slot_",
          "type": "uint256"
        }
      ],
      "name": "tokenSupplyInSlot",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "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": "uint256",
          "name": "fromTokenId_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "newTokenId",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId_",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "fromTokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "toTokenId_",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value_",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "valueDecimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052604051620038c7380380620038c7833981016040819052620000269162000343565b600054610100900460ff1615808015620000475750600054600160ff909116105b8062000077575062000064306200016260201b6200105f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b6200011184848462000171565b801562000158576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505062000522565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b6024820152600080516020620038a783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b620001da838383620001df565b505050565b600054610100900460ff166200023b5760405162461bcd60e51b815260206004820152602b6024820152600080516020620038a783398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600160365560336200024e848262000456565b5060346200025d838262000456565b506035805460ff191660ff929092169190911790555050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200029e57600080fd5b81516001600160401b0380821115620002bb57620002bb62000276565b604051601f8301601f19908116603f01168101908282118183101715620002e657620002e662000276565b816040528381526020925086838588010111156200030357600080fd5b600091505b8382101562000327578582018301518183018401529082019062000308565b83821115620003395760008385830101525b9695505050505050565b6000806000606084860312156200035957600080fd5b83516001600160401b03808211156200037157600080fd5b6200037f878388016200028c565b945060208601519150808211156200039657600080fd5b50620003a5868287016200028c565b925050604084015160ff81168114620003bd57600080fd5b809150509250925092565b600181811c90821680620003dd57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001da57600081815260208120601f850160051c810160208610156200042d5750805b601f850160051c820191505b818110156200044e5782815560010162000439565b505050505050565b81516001600160401b0381111562000472576200047262000276565b6200048a81620004838454620003c8565b8462000404565b602080601f831160018114620004c25760008415620004a95750858301515b600019600386901b1c1916600185901b1785556200044e565b600085815260208120601f198616915b82811015620004f357888601518255948401946001909101908401620004d2565b5085821015620005125787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61337580620005326000396000f3fe6080604052600436106101cc5760003560e01c80634f8a0f83116100f75780639cc7f70811610095578063e345e0bc11610064578063e345e0bc146104e1578063e8a3d48514610501578063e985e9c514610516578063ed08fa801461056357600080fd5b80639cc7f7081461046e578063a22cb4651461048e578063b88d4fde146104ae578063c87b56dd146104c157600080fd5b8063840f7113116100d1578063840f7113146104065780638cb0a5111461042657806395d89b4114610439578063993bef8d1461044e57600080fd5b80634f8a0f83146103a65780636352211e146103c657806370a08231146103e657600080fd5b806318160ddd1161016f578063310ed7f01161013e578063310ed7f01461033e5780633e7e86691461035157806342842e0e146103735780634f6ccce71461038657600080fd5b806318160ddd146102d657806323b872dd146102eb578063263f3e7e146102fe5780632f745c591461031e57600080fd5b8063081812fc116101ab578063081812fc14610256578063095ea7b31461028e57806309c3dd87146102a35780630f485c02146102c357600080fd5b8062cd0110146101d157806301ffc9a71461020457806306fdde0314610234575b600080fd5b3480156101dd57600080fd5b506101f16101ec366004612c1d565b610578565b6040519081526020015b60405180910390f35b34801561021057600080fd5b5061022461021f366004612c55565b61064e565b60405190151581526020016101fb565b34801561024057600080fd5b50610249610673565b6040516101fb9190612cca565b34801561026257600080fd5b50610276610271366004612cdd565b610705565b6040516001600160a01b0390911681526020016101fb565b6102a161029c366004612d0d565b610757565b005b3480156102af57600080fd5b506102496102be366004612cdd565b610832565b6101f16102d1366004612d37565b610924565b3480156102e257600080fd5b506038546101f1565b6102a16102f9366004612d6c565b61095c565b34801561030a57600080fd5b506101f1610319366004612cdd565b61098d565b34801561032a57600080fd5b506101f1610339366004612d0d565b6109d5565b6102a161034c366004612d98565b610a63565b34801561035d57600080fd5b5060355460405160ff90911681526020016101fb565b6102a1610381366004612d6c565b610a79565b34801561039257600080fd5b506101f16103a1366004612cdd565b610a94565b3480156103b257600080fd5b506101f16103c1366004612cdd565b610b25565b3480156103d257600080fd5b506102766103e1366004612cdd565b610b7a565b3480156103f257600080fd5b506101f1610401366004612dc4565b610c16565b34801561041257600080fd5b50603b54610276906001600160a01b031681565b6102a1610434366004612d37565b610c9e565b34801561044557600080fd5b50610249610d5d565b34801561045a57600080fd5b506101f1610469366004612cdd565b610d6c565b34801561047a57600080fd5b506101f1610489366004612cdd565b610e09565b34801561049a57600080fd5b506102a16104a9366004612ded565b610e51565b6102a16104bc366004612e93565b610e60565b3480156104cd57600080fd5b506102496104dc366004612cdd565b610e92565b3480156104ed57600080fd5b506101f16104fc366004612f3e565b610f31565b34801561050d57600080fd5b50610249610f65565b34801561052257600080fd5b50610224610531366004612f6a565b6001600160a01b039182166000908152603a602090815260408083209390941682526002909201909152205460ff1690565b34801561056f57600080fd5b506066546101f1565b600061058383610b25565b82106105f45760405162461bcd60e51b815260206004820152603560248201527f45524333353235536c6f74456e756d657261626c653a20736c6f7420746f6b656044820152746e20696e646578206f7574206f6620626f756e647360581b60648201526084015b60405180910390fd5b60008381526067602052604090205460668054909190811061061857610618612f94565b9060005260206000209060020201600101828154811061063a5761063a612f94565b906000526020600020015490505b92915050565b60006001600160e01b03198216631dba0dcf60e11b148061064857506106488261106e565b60606033805461068290612faa565b80601f01602080910402602001604051908101604052809291908181526020018280546106ae90612faa565b80156106fb5780601f106106d0576101008083540402835291602001916106fb565b820191906000526020600020905b8154815290600101906020018083116106de57829003601f168201915b5050505050905090565b600061071082611110565b60008281526039602052604090205460388054909190811061073457610734612f94565b60009182526020909120600460069092020101546001600160a01b031692915050565b600061076282610b7a565b9050806001600160a01b0316836001600160a01b0316036107955760405162461bcd60e51b81526004016105eb90612fe4565b336001600160a01b03821614806107b157506107b18133610531565b6108235760405162461bcd60e51b815260206004820152603960248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016105eb565b61082d8383611164565b505050565b6060600061084b60408051602081019091526000815290565b603b549091506001600160a01b03166108ab57600081511161087c576040518060200160405280600081525061091d565b80610886846111fb565b604051602001610897929190613026565b60405160208183030381529060405261091d565b603b54604051633601bfc560e11b8152600481018590526001600160a01b0390911690636c037f8a906024015b600060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261091d9190810190613066565b9392505050565b6000610931338584611304565b61093a84611394565b9050610951838261094a8761098d565b600061139e565b61091d8482846114e3565b6109663382611831565b6109825760405162461bcd60e51b81526004016105eb906130dd565b61082d8383836118b3565b600061099882611110565b6000828152603960205260409020546038805490919081106109bc576109bc612f94565b9060005260206000209060060201600101549050919050565b60006109e083610c16565b8210610a395760405162461bcd60e51b815260206004820152602260248201527f455243333532353a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016105eb565b6001600160a01b0383166000908152603a6020526040902080548390811061063a5761063a612f94565b610a6e338483611304565b61082d8383836114e3565b61082d83838360405180602001604052806000815250610e60565b6000610a9f60385490565b8210610af95760405162461bcd60e51b815260206004820152602360248201527f455243333532353a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016105eb565b60388281548110610b0c57610b0c612f94565b9060005260206000209060060201600001549050919050565b6000610b3082611a2b565b610b3c57506000919050565b600082815260676020526040902054606680549091908110610b6057610b60612f94565b600091825260209091206001600290920201015492915050565b6000610b8582611110565b600082815260396020526040902054603880549091908110610ba957610ba9612f94565b60009182526020909120600360069092020101546001600160a01b0316905080610c115760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b60448201526064016105eb565b919050565b60006001600160a01b038216610c825760405162461bcd60e51b815260206004820152602b60248201527f455243333532353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016105eb565b506001600160a01b03166000908152603a602052604090205490565b6000610ca984610b7a565b9050806001600160a01b0316836001600160a01b031603610cdc5760405162461bcd60e51b81526004016105eb90612fe4565b610ce63385611831565b610d4c5760405162461bcd60e51b815260206004820152603160248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016105eb565b610d57848484611a77565b50505050565b60606034805461068290612faa565b6000610d7760665490565b8210610ddd5760405162461bcd60e51b815260206004820152602f60248201527f45524333353235536c6f74456e756d657261626c653a20736c6f7420696e646560448201526e78206f7574206f6620626f756e647360881b60648201526084016105eb565b60668281548110610df057610df0612f94565b9060005260206000209060020201600001549050919050565b6000610e1482611110565b600082815260396020526040902054603880549091908110610e3857610e38612f94565b9060005260206000209060060201600201549050919050565b610e5c338383611baf565b5050565b610e6a3383611831565b610e865760405162461bcd60e51b81526004016105eb906130dd565b610d5784848484611c79565b6060610e9d82611110565b6000610eb460408051602081019091526000815290565b603b549091506001600160a01b0316610f00576000815111610ee5576040518060200160405280600081525061091d565b80610eef846111fb565b60405160200161089792919061312f565b603b546040516344a5a61760e11b8152600481018590526001600160a01b039091169063894b4c2e906024016108d8565b6000610f3c83611110565b5060009182526037602090815260408084206001600160a01b0393909316845291905290205490565b60606000610f7e60408051602081019091526000815290565b603b549091506001600160a01b0316610fde576000815111610faf5760405180602001604052806000815250611059565b80610fb930611cec565b604051602001610fca92919061315e565b604051602081830303815290604052611059565b603b60009054906101000a90046001600160a01b03166001600160a01b031663725fa09c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110599190810190613066565b91505090565b6001600160a01b03163b151590565b60006001600160e01b031982166301ffc9a760e01b148061109f57506001600160e01b03198216630354d60560e61b145b806110ba57506001600160e01b031982166380ac58cd60e01b145b806110d557506001600160e01b031982166370b0048160e11b145b806110f057506001600160e01b0319821663780e9d6360e01b145b8061064857506001600160e01b03198216635b5e139f60e01b1492915050565b61111981611d02565b6111615760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b60448201526064016105eb565b50565b60008181526039602052604090205460388054849290811061118857611188612f94565b6000918252602090912060069091020160040180546001600160a01b0319166001600160a01b03928316179055819083166111c282610b7a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060816000036112225750506040805180820190915260018152600360fc1b602082015290565b8160005b811561124c5780611236816131b8565b91506112459050600a836131e7565b9150611226565b60008167ffffffffffffffff81111561126757611267612e24565b6040519080825280601f01601f191660200182016040528015611291576020820181803683370190505b5090505b84156112fc576112a66001836131fb565b91506112b3600a86613212565b6112be906030613226565b60f81b8183815181106112d3576112d3612f94565b60200101906001600160f81b031916908160001a9053506112f5600a866131e7565b9450611295565b949350505050565b60006113108385610f31565b905061131c8484611831565b15801561132b57506000198114155b15610d5757818110156113805760405162461bcd60e51b815260206004820152601f60248201527f455243333532353a20696e73756666696369656e7420616c6c6f77616e63650060448201526064016105eb565b610d57838561138f85856131fb565b611a77565b6000610648611d4e565b6001600160a01b0384166113fe5760405162461bcd60e51b815260206004820152602160248201527f455243333532353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105eb565b826000036114585760405162461bcd60e51b815260206004820152602160248201527f455243333532353a2063616e6e6f74206d696e74207a65726f20746f6b656e496044820152601960fa1b60648201526084016105eb565b61146183611d02565b156114ae5760405162461bcd60e51b815260206004820152601d60248201527f455243333532353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016105eb565b6114be6000856000868686611d68565b6114c9848484611da5565b6114d38382611e6b565b610d576000856000868686611ef0565b6114ec83611d02565b6115485760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e736665722066726f6d20696e76616c696420746044820152661bdad95b88125160ca1b60648201526084016105eb565b61155182611d02565b6115ab5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20696e76616c696420746f6b604482015264195b88125160da1b60648201526084016105eb565b6000838152603960205260408120546038805490919081106115cf576115cf612f94565b906000526020600020906006020190506000603860396000868152602001908152602001600020548154811061160757611607612f94565b90600052602060002090600602019050828260020154101561167e5760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016105eb565b80600101548260010154146116ec5760405162461bcd60e51b815260206004820152602e60248201527f455243333532353a207472616e7366657220746f20746f6b656e20776974682060448201526d191a5999995c995b9d081cdb1bdd60921b60648201526084016105eb565b600380830154908201546001840154611717926001600160a01b039081169216908890889088611d68565b8282600201600082825461172b91906131fb565b92505081905550828160020160008282546117469190613226565b9091555050604051838152849086907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a36003808301549082015460018401546117ad926001600160a01b039081169216908890889088611ef0565b6117c885858560405180602001604052806000815250611f61565b61182a5760405162461bcd60e51b815260206004820152602d60248201527f455243333532353a207472616e736665722072656a656374656420627920455260448201526c21999a991aa932b1b2b4bb32b960991b60648201526084016105eb565b5050505050565b60008061183d83610b7a565b9050806001600160a01b0316846001600160a01b0316148061188857506001600160a01b038082166000908152603a60209081526040808320938816835260029093019052205460ff165b806112fc5750836001600160a01b03166118a184610705565b6001600160a01b031614949350505050565b826001600160a01b03166118c682610b7a565b6001600160a01b0316146119285760405162461bcd60e51b8152602060048201526024808201527f455243333532353a207472616e736665722066726f6d20696e76616c6964206f6044820152633bb732b960e11b60648201526084016105eb565b6001600160a01b03821661198c5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016105eb565b60006119978261098d565b905060006119a483610e09565b90506119b4858585868686611d68565b6119bf600084611164565b6119c8836120d1565b6119d2858461217c565b6119dc848461229d565b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461182a858585868686611ef0565b606654600090158015906106485750600082815260676020526040902054606680548492908110611a5e57611a5e612f94565b9060005260206000209060020201600001541492915050565b6001600160a01b038216611ae05760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20617070726f76652076616c756520746f20746865207a65604482015269726f206164647265737360b01b60648201526084016105eb565b611aea8284612326565b611b5057600083815260396020526040902054603880549091908110611b1257611b12612f94565b60009182526020808320600692909202909101600501805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008381526037602090815260408083206001600160a01b038616808552908352928190208490555183815285917f621b050de0ad08b51d19b48b3e6df75348c4de6bdd93e81b252ca62e28265b1b91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b031603611c105760405162461bcd60e51b815260206004820152601a60248201527f455243333532353a20617070726f766520746f2063616c6c657200000000000060448201526064016105eb565b6001600160a01b038381166000818152603a602090815260408083209487168084526002909501825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611ba2565b611c848484846118b3565b611c90848484846123f9565b610d575760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e7366657220746f206e6f6e204552433732315260448201526632b1b2b4bb32b960c91b60648201526084016105eb565b60606106486001600160a01b038316601461253f565b603854600090158015906106485750600082815260396020526040902054603880548492908110611d3557611d35612f94565b9060005260206000209060060201600001541492915050565b6036805460009182611d5f836131b8565b91905055905090565b6001600160a01b038616158015611d7d575083155b8015611d8f5750611d8d82611a2b565b155b15611d9d57611d9d826126db565b505050505050565b6040805160c081018252838152602080820184905260008284018190526001600160a01b038716606084015260808301819052835181815291820190935260a08201529050611df3816127a2565b611dfd848461229d565b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816000847fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a450505050565b600082815260396020526040902054603880548392908110611e8f57611e8f612f94565b90600052602060002090600602016002016000828254611eaf9190613226565b909155505060405181815282906000907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a35050565b6001600160a01b038616158015611f05575083155b8015611f185750611f1682846128f4565b155b15611f2c57611f278284612980565b611d9d565b6001600160a01b038516158015611f41575082155b8015611f525750611f5282856128f4565b15611f2757611f2782856129e1565b600080611f6d85610b7a565b9050803b63ffffffff16156120c7576040516301ffc9a760e01b8152629ce20b60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa925050508015611fe2575060408051601f3d908101601f19168201909252611fdf9181019061323e565b60015b612021573d808015612010576040519150601f19603f3d011682016040523d82523d6000602084013e612015565b606091505b506001925050506112fc565b80156120bc57604051629ce20b60e01b81526000906001600160a01b03841690629ce20b9061205c9033908c908c908c908c9060040161325b565b6020604051808303816000875af115801561207b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209f9190613299565b6001600160e01b031916629ce20b60e01b1493506112fc92505050565b6001925050506112fc565b60019150506112fc565b6000818152603960205260408120546038805490919081106120f5576120f5612f94565b600091825260208220600560069092020190810154909250905b8181101561216d57600083600501828154811061212e5761212e612f94565b60009182526020808320909101548783526037825260408084206001600160a01b03909216845291528120555080612165816131b8565b91505061210f565b5061082d600583016000612b4a565b6000818152603960205260408120546038805490919081106121a0576121a0612f94565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b039485161790559184168152603a9091526040812080549091906121ef906001906131fb565b9050600082600001828154811061220857612208612f94565b9060005260206000200154905060008360010160008681526020019081526020016000205490508184600001828154811061224557612245612f94565b6000918252602080832090910192909255838152600186019091526040808220839055868252812055835484908061227f5761227f6132b6565b60019003818190600052602060002001600090559055505050505050565b6000818152603960205260409020546038805484929081106122c1576122c1612f94565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b03948516179055939091168152603a80845260408083208054858552600182810188529285208190559286529082018155825292902090910155565b60008181526039602052604081205460388054839290811061234a5761234a612f94565b6000918252602082206005600690920201015491505b818110156123ee57600084815260396020526040902054603880546001600160a01b0388169290811061239557612395612f94565b906000526020600020906006020160050182815481106123b7576123b7612f94565b6000918252602090912001546001600160a01b0316036123dc57600192505050610648565b806123e6816131b8565b915050612360565b506000949350505050565b6000833b63ffffffff161561253757604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061243a9033908990889088906004016132cc565b6020604051808303816000875af1925050508015612475575060408051601f3d908101601f1916820190925261247291810190613299565b60015b61251d573d8080156124a3576040519150601f19603f3d011682016040523d82523d6000602084013e6124a8565b606091505b5080516000036125155760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016105eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112fc565b5060016112fc565b6060600061254e836002613309565b612559906002613226565b67ffffffffffffffff81111561257157612571612e24565b6040519080825280601f01601f19166020018201604052801561259b576020820181803683370190505b509050600360fc1b816000815181106125b6576125b6612f94565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106125e5576125e5612f94565b60200101906001600160f81b031916908160001a9053506000612609846002613309565b612614906001613226565b90505b600181111561268c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061264857612648612f94565b1a60f81b82828151811061265e5761265e612f94565b60200101906001600160f81b031916908160001a90535060049490941c9361268581613328565b9050612617565b50831561091d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105eb565b6126e481611a2b565b156127445760405162461bcd60e51b815260206004820152602a60248201527f45524333353235536c6f74456e756d657261626c653a20736c6f7420616c72656044820152696164792065786973747360b01b60648201526084016105eb565b60408051808201825282815281516000808252602082810190945292820152905061276e81612ac5565b816000807fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a45050565b603880548251600090815260396020908152604080832084905560018401855593909152835160069092027f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f4561998101928355818501517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619a820155928401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619b84015560608401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619c840180546001600160a01b039283166001600160a01b03199182161790915560808601517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619d8601805491909316911617905560a084015180518594610d57937f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619e909101920190612b68565b60008281526067602052604081205460668054839290811061291857612918612f94565b90600052602060002090600202019050600081600101805490501180156112fc57506000848152606560209081526040808320868452909152902054600182018054859290811061296b5761296b612f94565b90600052602060002001541491505092915050565b6000828152606760205260408120546066805490919081106129a4576129a4612f94565b6000918252602080832060016002909302018201805496845260658252604080852087865283528420879055918601825590825290209092015550565b600082815260676020526040812054606680549091908110612a0557612a05612f94565b600091825260208220600160029092020181810154909350612a2791906131fb565b90506000826001018281548110612a4057612a40612f94565b6000918252602080832090910154878352606582526040808420888552909252912054600185018054929350909183919083908110612a8157612a81612f94565b600091825260208083209190910192909255878152606582526040808220858352909252818120839055868152908120556001840180548061227f5761227f6132b6565b60668054825160009081526067602090815260408220839055600183018455929052825160029091027f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435481019182558284015180518594610d57937f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435501920190612bcd565b50805460008255906000526020600020908101906111619190612c08565b828054828255906000526020600020908101928215612bbd579160200282015b82811115612bbd57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612b88565b50612bc9929150612c08565b5090565b828054828255906000526020600020908101928215612bbd579160200282015b82811115612bbd578251825591602001919060010190612bed565b5b80821115612bc95760008155600101612c09565b60008060408385031215612c3057600080fd5b50508035926020909101359150565b6001600160e01b03198116811461116157600080fd5b600060208284031215612c6757600080fd5b813561091d81612c3f565b60005b83811015612c8d578181015183820152602001612c75565b83811115610d575750506000910152565b60008151808452612cb6816020860160208601612c72565b601f01601f19169290920160200192915050565b60208152600061091d6020830184612c9e565b600060208284031215612cef57600080fd5b5035919050565b80356001600160a01b0381168114610c1157600080fd5b60008060408385031215612d2057600080fd5b612d2983612cf6565b946020939093013593505050565b600080600060608486031215612d4c57600080fd5b83359250612d5c60208501612cf6565b9150604084013590509250925092565b600080600060608486031215612d8157600080fd5b612d8a84612cf6565b9250612d5c60208501612cf6565b600080600060608486031215612dad57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612dd657600080fd5b61091d82612cf6565b801515811461116157600080fd5b60008060408385031215612e0057600080fd5b612e0983612cf6565b91506020830135612e1981612ddf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e6357612e63612e24565b604052919050565b600067ffffffffffffffff821115612e8557612e85612e24565b50601f01601f191660200190565b60008060008060808587031215612ea957600080fd5b612eb285612cf6565b9350612ec060208601612cf6565b925060408501359150606085013567ffffffffffffffff811115612ee357600080fd5b8501601f81018713612ef457600080fd5b8035612f07612f0282612e6b565b612e3a565b818152886020838501011115612f1c57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215612f5157600080fd5b82359150612f6160208401612cf6565b90509250929050565b60008060408385031215612f7d57600080fd5b612f8683612cf6565b9150612f6160208401612cf6565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680612fbe57607f821691505b602082108103612fde57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f455243333532353a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60008351613038818460208801612c72565b64736c6f742f60d81b908301908152835161305a816005840160208801612c72565b01600501949350505050565b60006020828403121561307857600080fd5b815167ffffffffffffffff81111561308f57600080fd5b8201601f810184136130a057600080fd5b80516130ae612f0282612e6b565b8181528560208385010111156130c357600080fd5b6130d4826020830160208601612c72565b95945050505050565b60208082526032908201527f455243333532353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60008351613141818460208801612c72565b835190830190613155818360208801612c72565b01949350505050565b60008351613170818460208801612c72565b68636f6e74726163742f60b81b9083019081528351613196816009840160208801612c72565b01600901949350505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016131ca576131ca6131a2565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826131f6576131f66131d1565b500490565b60008282101561320d5761320d6131a2565b500390565b600082613221576132216131d1565b500690565b60008219821115613239576132396131a2565b500190565b60006020828403121561325057600080fd5b815161091d81612ddf565b60018060a01b038616815284602082015283604082015282606082015260a06080820152600061328e60a0830184612c9e565b979650505050505050565b6000602082840312156132ab57600080fd5b815161091d81612c3f565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906132ff90830184612c9e565b9695505050505050565b6000816000190483118215151615613323576133236131a2565b500290565b600081613337576133376131a2565b50600019019056fea2646970667358221220891cf2f569f1f1272968121d91b9d5bdd5ae0642000a35358e388129c82c38dc64736f6c634300080f0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
  "deployedBytecode": "0x6080604052600436106101cc5760003560e01c80634f8a0f83116100f75780639cc7f70811610095578063e345e0bc11610064578063e345e0bc146104e1578063e8a3d48514610501578063e985e9c514610516578063ed08fa801461056357600080fd5b80639cc7f7081461046e578063a22cb4651461048e578063b88d4fde146104ae578063c87b56dd146104c157600080fd5b8063840f7113116100d1578063840f7113146104065780638cb0a5111461042657806395d89b4114610439578063993bef8d1461044e57600080fd5b80634f8a0f83146103a65780636352211e146103c657806370a08231146103e657600080fd5b806318160ddd1161016f578063310ed7f01161013e578063310ed7f01461033e5780633e7e86691461035157806342842e0e146103735780634f6ccce71461038657600080fd5b806318160ddd146102d657806323b872dd146102eb578063263f3e7e146102fe5780632f745c591461031e57600080fd5b8063081812fc116101ab578063081812fc14610256578063095ea7b31461028e57806309c3dd87146102a35780630f485c02146102c357600080fd5b8062cd0110146101d157806301ffc9a71461020457806306fdde0314610234575b600080fd5b3480156101dd57600080fd5b506101f16101ec366004612c1d565b610578565b6040519081526020015b60405180910390f35b34801561021057600080fd5b5061022461021f366004612c55565b61064e565b60405190151581526020016101fb565b34801561024057600080fd5b50610249610673565b6040516101fb9190612cca565b34801561026257600080fd5b50610276610271366004612cdd565b610705565b6040516001600160a01b0390911681526020016101fb565b6102a161029c366004612d0d565b610757565b005b3480156102af57600080fd5b506102496102be366004612cdd565b610832565b6101f16102d1366004612d37565b610924565b3480156102e257600080fd5b506038546101f1565b6102a16102f9366004612d6c565b61095c565b34801561030a57600080fd5b506101f1610319366004612cdd565b61098d565b34801561032a57600080fd5b506101f1610339366004612d0d565b6109d5565b6102a161034c366004612d98565b610a63565b34801561035d57600080fd5b5060355460405160ff90911681526020016101fb565b6102a1610381366004612d6c565b610a79565b34801561039257600080fd5b506101f16103a1366004612cdd565b610a94565b3480156103b257600080fd5b506101f16103c1366004612cdd565b610b25565b3480156103d257600080fd5b506102766103e1366004612cdd565b610b7a565b3480156103f257600080fd5b506101f1610401366004612dc4565b610c16565b34801561041257600080fd5b50603b54610276906001600160a01b031681565b6102a1610434366004612d37565b610c9e565b34801561044557600080fd5b50610249610d5d565b34801561045a57600080fd5b506101f1610469366004612cdd565b610d6c565b34801561047a57600080fd5b506101f1610489366004612cdd565b610e09565b34801561049a57600080fd5b506102a16104a9366004612ded565b610e51565b6102a16104bc366004612e93565b610e60565b3480156104cd57600080fd5b506102496104dc366004612cdd565b610e92565b3480156104ed57600080fd5b506101f16104fc366004612f3e565b610f31565b34801561050d57600080fd5b50610249610f65565b34801561052257600080fd5b50610224610531366004612f6a565b6001600160a01b039182166000908152603a602090815260408083209390941682526002909201909152205460ff1690565b34801561056f57600080fd5b506066546101f1565b600061058383610b25565b82106105f45760405162461bcd60e51b815260206004820152603560248201527f45524333353235536c6f74456e756d657261626c653a20736c6f7420746f6b656044820152746e20696e646578206f7574206f6620626f756e647360581b60648201526084015b60405180910390fd5b60008381526067602052604090205460668054909190811061061857610618612f94565b9060005260206000209060020201600101828154811061063a5761063a612f94565b906000526020600020015490505b92915050565b60006001600160e01b03198216631dba0dcf60e11b148061064857506106488261106e565b60606033805461068290612faa565b80601f01602080910402602001604051908101604052809291908181526020018280546106ae90612faa565b80156106fb5780601f106106d0576101008083540402835291602001916106fb565b820191906000526020600020905b8154815290600101906020018083116106de57829003601f168201915b5050505050905090565b600061071082611110565b60008281526039602052604090205460388054909190811061073457610734612f94565b60009182526020909120600460069092020101546001600160a01b031692915050565b600061076282610b7a565b9050806001600160a01b0316836001600160a01b0316036107955760405162461bcd60e51b81526004016105eb90612fe4565b336001600160a01b03821614806107b157506107b18133610531565b6108235760405162461bcd60e51b815260206004820152603960248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016105eb565b61082d8383611164565b505050565b6060600061084b60408051602081019091526000815290565b603b549091506001600160a01b03166108ab57600081511161087c576040518060200160405280600081525061091d565b80610886846111fb565b604051602001610897929190613026565b60405160208183030381529060405261091d565b603b54604051633601bfc560e11b8152600481018590526001600160a01b0390911690636c037f8a906024015b600060405180830381865afa1580156108f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261091d9190810190613066565b9392505050565b6000610931338584611304565b61093a84611394565b9050610951838261094a8761098d565b600061139e565b61091d8482846114e3565b6109663382611831565b6109825760405162461bcd60e51b81526004016105eb906130dd565b61082d8383836118b3565b600061099882611110565b6000828152603960205260409020546038805490919081106109bc576109bc612f94565b9060005260206000209060060201600101549050919050565b60006109e083610c16565b8210610a395760405162461bcd60e51b815260206004820152602260248201527f455243333532353a206f776e657220696e646578206f7574206f6620626f756e604482015261647360f01b60648201526084016105eb565b6001600160a01b0383166000908152603a6020526040902080548390811061063a5761063a612f94565b610a6e338483611304565b61082d8383836114e3565b61082d83838360405180602001604052806000815250610e60565b6000610a9f60385490565b8210610af95760405162461bcd60e51b815260206004820152602360248201527f455243333532353a20676c6f62616c20696e646578206f7574206f6620626f756044820152626e647360e81b60648201526084016105eb565b60388281548110610b0c57610b0c612f94565b9060005260206000209060060201600001549050919050565b6000610b3082611a2b565b610b3c57506000919050565b600082815260676020526040902054606680549091908110610b6057610b60612f94565b600091825260209091206001600290920201015492915050565b6000610b8582611110565b600082815260396020526040902054603880549091908110610ba957610ba9612f94565b60009182526020909120600360069092020101546001600160a01b0316905080610c115760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b60448201526064016105eb565b919050565b60006001600160a01b038216610c825760405162461bcd60e51b815260206004820152602b60248201527f455243333532353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016105eb565b506001600160a01b03166000908152603a602052604090205490565b6000610ca984610b7a565b9050806001600160a01b0316836001600160a01b031603610cdc5760405162461bcd60e51b81526004016105eb90612fe4565b610ce63385611831565b610d4c5760405162461bcd60e51b815260206004820152603160248201527f455243333532353a20617070726f76652063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016105eb565b610d57848484611a77565b50505050565b60606034805461068290612faa565b6000610d7760665490565b8210610ddd5760405162461bcd60e51b815260206004820152602f60248201527f45524333353235536c6f74456e756d657261626c653a20736c6f7420696e646560448201526e78206f7574206f6620626f756e647360881b60648201526084016105eb565b60668281548110610df057610df0612f94565b9060005260206000209060020201600001549050919050565b6000610e1482611110565b600082815260396020526040902054603880549091908110610e3857610e38612f94565b9060005260206000209060060201600201549050919050565b610e5c338383611baf565b5050565b610e6a3383611831565b610e865760405162461bcd60e51b81526004016105eb906130dd565b610d5784848484611c79565b6060610e9d82611110565b6000610eb460408051602081019091526000815290565b603b549091506001600160a01b0316610f00576000815111610ee5576040518060200160405280600081525061091d565b80610eef846111fb565b60405160200161089792919061312f565b603b546040516344a5a61760e11b8152600481018590526001600160a01b039091169063894b4c2e906024016108d8565b6000610f3c83611110565b5060009182526037602090815260408084206001600160a01b0393909316845291905290205490565b60606000610f7e60408051602081019091526000815290565b603b549091506001600160a01b0316610fde576000815111610faf5760405180602001604052806000815250611059565b80610fb930611cec565b604051602001610fca92919061315e565b604051602081830303815290604052611059565b603b60009054906101000a90046001600160a01b03166001600160a01b031663725fa09c6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611031573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110599190810190613066565b91505090565b6001600160a01b03163b151590565b60006001600160e01b031982166301ffc9a760e01b148061109f57506001600160e01b03198216630354d60560e61b145b806110ba57506001600160e01b031982166380ac58cd60e01b145b806110d557506001600160e01b031982166370b0048160e11b145b806110f057506001600160e01b0319821663780e9d6360e01b145b8061064857506001600160e01b03198216635b5e139f60e01b1492915050565b61111981611d02565b6111615760405162461bcd60e51b8152602060048201526019602482015278115490cccd4c8d4e881a5b9d985b1a59081d1bdad95b881251603a1b60448201526064016105eb565b50565b60008181526039602052604090205460388054849290811061118857611188612f94565b6000918252602090912060069091020160040180546001600160a01b0319166001600160a01b03928316179055819083166111c282610b7a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6060816000036112225750506040805180820190915260018152600360fc1b602082015290565b8160005b811561124c5780611236816131b8565b91506112459050600a836131e7565b9150611226565b60008167ffffffffffffffff81111561126757611267612e24565b6040519080825280601f01601f191660200182016040528015611291576020820181803683370190505b5090505b84156112fc576112a66001836131fb565b91506112b3600a86613212565b6112be906030613226565b60f81b8183815181106112d3576112d3612f94565b60200101906001600160f81b031916908160001a9053506112f5600a866131e7565b9450611295565b949350505050565b60006113108385610f31565b905061131c8484611831565b15801561132b57506000198114155b15610d5757818110156113805760405162461bcd60e51b815260206004820152601f60248201527f455243333532353a20696e73756666696369656e7420616c6c6f77616e63650060448201526064016105eb565b610d57838561138f85856131fb565b611a77565b6000610648611d4e565b6001600160a01b0384166113fe5760405162461bcd60e51b815260206004820152602160248201527f455243333532353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016105eb565b826000036114585760405162461bcd60e51b815260206004820152602160248201527f455243333532353a2063616e6e6f74206d696e74207a65726f20746f6b656e496044820152601960fa1b60648201526084016105eb565b61146183611d02565b156114ae5760405162461bcd60e51b815260206004820152601d60248201527f455243333532353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016105eb565b6114be6000856000868686611d68565b6114c9848484611da5565b6114d38382611e6b565b610d576000856000868686611ef0565b6114ec83611d02565b6115485760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e736665722066726f6d20696e76616c696420746044820152661bdad95b88125160ca1b60648201526084016105eb565b61155182611d02565b6115ab5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20696e76616c696420746f6b604482015264195b88125160da1b60648201526084016105eb565b6000838152603960205260408120546038805490919081106115cf576115cf612f94565b906000526020600020906006020190506000603860396000868152602001908152602001600020548154811061160757611607612f94565b90600052602060002090600602019050828260020154101561167e5760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b60648201526084016105eb565b80600101548260010154146116ec5760405162461bcd60e51b815260206004820152602e60248201527f455243333532353a207472616e7366657220746f20746f6b656e20776974682060448201526d191a5999995c995b9d081cdb1bdd60921b60648201526084016105eb565b600380830154908201546001840154611717926001600160a01b039081169216908890889088611d68565b8282600201600082825461172b91906131fb565b92505081905550828160020160008282546117469190613226565b9091555050604051838152849086907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a36003808301549082015460018401546117ad926001600160a01b039081169216908890889088611ef0565b6117c885858560405180602001604052806000815250611f61565b61182a5760405162461bcd60e51b815260206004820152602d60248201527f455243333532353a207472616e736665722072656a656374656420627920455260448201526c21999a991aa932b1b2b4bb32b960991b60648201526084016105eb565b5050505050565b60008061183d83610b7a565b9050806001600160a01b0316846001600160a01b0316148061188857506001600160a01b038082166000908152603a60209081526040808320938816835260029093019052205460ff165b806112fc5750836001600160a01b03166118a184610705565b6001600160a01b031614949350505050565b826001600160a01b03166118c682610b7a565b6001600160a01b0316146119285760405162461bcd60e51b8152602060048201526024808201527f455243333532353a207472616e736665722066726f6d20696e76616c6964206f6044820152633bb732b960e11b60648201526084016105eb565b6001600160a01b03821661198c5760405162461bcd60e51b815260206004820152602560248201527f455243333532353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016105eb565b60006119978261098d565b905060006119a483610e09565b90506119b4858585868686611d68565b6119bf600084611164565b6119c8836120d1565b6119d2858461217c565b6119dc848461229d565b82846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461182a858585868686611ef0565b606654600090158015906106485750600082815260676020526040902054606680548492908110611a5e57611a5e612f94565b9060005260206000209060020201600001541492915050565b6001600160a01b038216611ae05760405162461bcd60e51b815260206004820152602a60248201527f455243333532353a20617070726f76652076616c756520746f20746865207a65604482015269726f206164647265737360b01b60648201526084016105eb565b611aea8284612326565b611b5057600083815260396020526040902054603880549091908110611b1257611b12612f94565b60009182526020808320600692909202909101600501805460018101825590835291200180546001600160a01b0319166001600160a01b0384161790555b60008381526037602090815260408083206001600160a01b038616808552908352928190208490555183815285917f621b050de0ad08b51d19b48b3e6df75348c4de6bdd93e81b252ca62e28265b1b91015b60405180910390a3505050565b816001600160a01b0316836001600160a01b031603611c105760405162461bcd60e51b815260206004820152601a60248201527f455243333532353a20617070726f766520746f2063616c6c657200000000000060448201526064016105eb565b6001600160a01b038381166000818152603a602090815260408083209487168084526002909501825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611ba2565b611c848484846118b3565b611c90848484846123f9565b610d575760405162461bcd60e51b815260206004820152602760248201527f455243333532353a207472616e7366657220746f206e6f6e204552433732315260448201526632b1b2b4bb32b960c91b60648201526084016105eb565b60606106486001600160a01b038316601461253f565b603854600090158015906106485750600082815260396020526040902054603880548492908110611d3557611d35612f94565b9060005260206000209060060201600001541492915050565b6036805460009182611d5f836131b8565b91905055905090565b6001600160a01b038616158015611d7d575083155b8015611d8f5750611d8d82611a2b565b155b15611d9d57611d9d826126db565b505050505050565b6040805160c081018252838152602080820184905260008284018190526001600160a01b038716606084015260808301819052835181815291820190935260a08201529050611df3816127a2565b611dfd848461229d565b60405183906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816000847fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a450505050565b600082815260396020526040902054603880548392908110611e8f57611e8f612f94565b90600052602060002090600602016002016000828254611eaf9190613226565b909155505060405181815282906000907f0b2aac84f3ec956911fd78eae5311062972ff949f38412e8da39069d9f068cc69060200160405180910390a35050565b6001600160a01b038616158015611f05575083155b8015611f185750611f1682846128f4565b155b15611f2c57611f278284612980565b611d9d565b6001600160a01b038516158015611f41575082155b8015611f525750611f5282856128f4565b15611f2757611f2782856129e1565b600080611f6d85610b7a565b9050803b63ffffffff16156120c7576040516301ffc9a760e01b8152629ce20b60e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa925050508015611fe2575060408051601f3d908101601f19168201909252611fdf9181019061323e565b60015b612021573d808015612010576040519150601f19603f3d011682016040523d82523d6000602084013e612015565b606091505b506001925050506112fc565b80156120bc57604051629ce20b60e01b81526000906001600160a01b03841690629ce20b9061205c9033908c908c908c908c9060040161325b565b6020604051808303816000875af115801561207b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209f9190613299565b6001600160e01b031916629ce20b60e01b1493506112fc92505050565b6001925050506112fc565b60019150506112fc565b6000818152603960205260408120546038805490919081106120f5576120f5612f94565b600091825260208220600560069092020190810154909250905b8181101561216d57600083600501828154811061212e5761212e612f94565b60009182526020808320909101548783526037825260408084206001600160a01b03909216845291528120555080612165816131b8565b91505061210f565b5061082d600583016000612b4a565b6000818152603960205260408120546038805490919081106121a0576121a0612f94565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b039485161790559184168152603a9091526040812080549091906121ef906001906131fb565b9050600082600001828154811061220857612208612f94565b9060005260206000200154905060008360010160008681526020019081526020016000205490508184600001828154811061224557612245612f94565b6000918252602080832090910192909255838152600186019091526040808220839055868252812055835484908061227f5761227f6132b6565b60019003818190600052602060002001600090559055505050505050565b6000818152603960205260409020546038805484929081106122c1576122c1612f94565b6000918252602080832060069290920290910160030180546001600160a01b0319166001600160a01b03948516179055939091168152603a80845260408083208054858552600182810188529285208190559286529082018155825292902090910155565b60008181526039602052604081205460388054839290811061234a5761234a612f94565b6000918252602082206005600690920201015491505b818110156123ee57600084815260396020526040902054603880546001600160a01b0388169290811061239557612395612f94565b906000526020600020906006020160050182815481106123b7576123b7612f94565b6000918252602090912001546001600160a01b0316036123dc57600192505050610648565b806123e6816131b8565b915050612360565b506000949350505050565b6000833b63ffffffff161561253757604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061243a9033908990889088906004016132cc565b6020604051808303816000875af1925050508015612475575060408051601f3d908101601f1916820190925261247291810190613299565b60015b61251d573d8080156124a3576040519150601f19603f3d011682016040523d82523d6000602084013e6124a8565b606091505b5080516000036125155760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60648201526084016105eb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506112fc565b5060016112fc565b6060600061254e836002613309565b612559906002613226565b67ffffffffffffffff81111561257157612571612e24565b6040519080825280601f01601f19166020018201604052801561259b576020820181803683370190505b509050600360fc1b816000815181106125b6576125b6612f94565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106125e5576125e5612f94565b60200101906001600160f81b031916908160001a9053506000612609846002613309565b612614906001613226565b90505b600181111561268c576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061264857612648612f94565b1a60f81b82828151811061265e5761265e612f94565b60200101906001600160f81b031916908160001a90535060049490941c9361268581613328565b9050612617565b50831561091d5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016105eb565b6126e481611a2b565b156127445760405162461bcd60e51b815260206004820152602a60248201527f45524333353235536c6f74456e756d657261626c653a20736c6f7420616c72656044820152696164792065786973747360b01b60648201526084016105eb565b60408051808201825282815281516000808252602082810190945292820152905061276e81612ac5565b816000807fe4f48c240d3b994948aa54f3e2f5fca59263dfe1d52b6e4cf39a5d249b5ccb6560405160405180910390a45050565b603880548251600090815260396020908152604080832084905560018401855593909152835160069092027f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f4561998101928355818501517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619a820155928401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619b84015560608401517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619c840180546001600160a01b039283166001600160a01b03199182161790915560808601517f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619d8601805491909316911617905560a084015180518594610d57937f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619e909101920190612b68565b60008281526067602052604081205460668054839290811061291857612918612f94565b90600052602060002090600202019050600081600101805490501180156112fc57506000848152606560209081526040808320868452909152902054600182018054859290811061296b5761296b612f94565b90600052602060002001541491505092915050565b6000828152606760205260408120546066805490919081106129a4576129a4612f94565b6000918252602080832060016002909302018201805496845260658252604080852087865283528420879055918601825590825290209092015550565b600082815260676020526040812054606680549091908110612a0557612a05612f94565b600091825260208220600160029092020181810154909350612a2791906131fb565b90506000826001018281548110612a4057612a40612f94565b6000918252602080832090910154878352606582526040808420888552909252912054600185018054929350909183919083908110612a8157612a81612f94565b600091825260208083209190910192909255878152606582526040808220858352909252818120839055868152908120556001840180548061227f5761227f6132b6565b60668054825160009081526067602090815260408220839055600183018455929052825160029091027f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435481019182558284015180518594610d57937f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e9435501920190612bcd565b50805460008255906000526020600020908101906111619190612c08565b828054828255906000526020600020908101928215612bbd579160200282015b82811115612bbd57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612b88565b50612bc9929150612c08565b5090565b828054828255906000526020600020908101928215612bbd579160200282015b82811115612bbd578251825591602001919060010190612bed565b5b80821115612bc95760008155600101612c09565b60008060408385031215612c3057600080fd5b50508035926020909101359150565b6001600160e01b03198116811461116157600080fd5b600060208284031215612c6757600080fd5b813561091d81612c3f565b60005b83811015612c8d578181015183820152602001612c75565b83811115610d575750506000910152565b60008151808452612cb6816020860160208601612c72565b601f01601f19169290920160200192915050565b60208152600061091d6020830184612c9e565b600060208284031215612cef57600080fd5b5035919050565b80356001600160a01b0381168114610c1157600080fd5b60008060408385031215612d2057600080fd5b612d2983612cf6565b946020939093013593505050565b600080600060608486031215612d4c57600080fd5b83359250612d5c60208501612cf6565b9150604084013590509250925092565b600080600060608486031215612d8157600080fd5b612d8a84612cf6565b9250612d5c60208501612cf6565b600080600060608486031215612dad57600080fd5b505081359360208301359350604090920135919050565b600060208284031215612dd657600080fd5b61091d82612cf6565b801515811461116157600080fd5b60008060408385031215612e0057600080fd5b612e0983612cf6565b91506020830135612e1981612ddf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612e6357612e63612e24565b604052919050565b600067ffffffffffffffff821115612e8557612e85612e24565b50601f01601f191660200190565b60008060008060808587031215612ea957600080fd5b612eb285612cf6565b9350612ec060208601612cf6565b925060408501359150606085013567ffffffffffffffff811115612ee357600080fd5b8501601f81018713612ef457600080fd5b8035612f07612f0282612e6b565b612e3a565b818152886020838501011115612f1c57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b60008060408385031215612f5157600080fd5b82359150612f6160208401612cf6565b90509250929050565b60008060408385031215612f7d57600080fd5b612f8683612cf6565b9150612f6160208401612cf6565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680612fbe57607f821691505b602082108103612fde57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526022908201527f455243333532353a20617070726f76616c20746f2063757272656e74206f776e60408201526132b960f11b606082015260800190565b60008351613038818460208801612c72565b64736c6f742f60d81b908301908152835161305a816005840160208801612c72565b01600501949350505050565b60006020828403121561307857600080fd5b815167ffffffffffffffff81111561308f57600080fd5b8201601f810184136130a057600080fd5b80516130ae612f0282612e6b565b8181528560208385010111156130c357600080fd5b6130d4826020830160208601612c72565b95945050505050565b60208082526032908201527f455243333532353a207472616e736665722063616c6c6572206973206e6f74206040820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606082015260800190565b60008351613141818460208801612c72565b835190830190613155818360208801612c72565b01949350505050565b60008351613170818460208801612c72565b68636f6e74726163742f60b81b9083019081528351613196816009840160208801612c72565b01600901949350505050565b634e487b7160e01b600052601160045260246000fd5b6000600182016131ca576131ca6131a2565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826131f6576131f66131d1565b500490565b60008282101561320d5761320d6131a2565b500390565b600082613221576132216131d1565b500690565b60008219821115613239576132396131a2565b500190565b60006020828403121561325057600080fd5b815161091d81612ddf565b60018060a01b038616815284602082015283604082015282606082015260a06080820152600061328e60a0830184612c9e565b979650505050505050565b6000602082840312156132ab57600080fd5b815161091d81612c3f565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906132ff90830184612c9e565b9695505050505050565b6000816000190483118215151615613323576133236131a2565b500290565b600081613337576133376131a2565b50600019019056fea2646970667358221220891cf2f569f1f1272968121d91b9d5bdd5ae0642000a35358e388129c82c38dc64736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
