{
  "_format": "hh-sol-artifact-1",
  "contractName": "TacSAFactory",
  "sourceName": "contracts/smart-account/TacSAFactory.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "smartAccountAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "application",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "tvmWallet",
          "type": "string"
        }
      ],
      "name": "SmartAccountCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "beacon",
      "outputs": [
        {
          "internalType": "contract UpgradeableBeacon",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "disableInitializers",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tvmWallet",
          "type": "string"
        }
      ],
      "name": "getOrCreateSmartAccount",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isNewAccount",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tvmWallet",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "application",
          "type": "address"
        }
      ],
      "name": "getSmartAccountForApplication",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_initBlueprint",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tvmWallet",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "application",
          "type": "address"
        }
      ],
      "name": "predictSmartAccountAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "application",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        }
      ],
      "name": "smartAccounts",
      "outputs": [
        {
          "internalType": "address",
          "name": "smartAccount",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newBlueprint",
          "type": "address"
        }
      ],
      "name": "updateBlueprint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a060405230608052348015601357600080fd5b50608051611e5661003d60003960008181610ab201528181610adb0152610c210152611e566000f3fe6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063dbe6e7f911610059578063dbe6e7f9146102bf578063e30c3978146102df578063f2fde38b146102f4578063fa81f7d91461031457600080fd5b80638da5cb5b1461020d578063a66c4f5014610222578063ad3cb1cc14610261578063c4d66de81461029f57600080fd5b806359659e90116100c657806359659e90146101a357806370d367c3146101c3578063715018a6146101e357806379ba5097146101f857600080fd5b806331f44900146100f8578063391cb3581461010f5780634f1ef2861461016d57806352d1902d14610180575b600080fd5b34801561010457600080fd5b5061010d610334565b005b34801561011b57600080fd5b5061015061012a366004611116565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61017b3660046111d0565b610375565b34801561018c57600080fd5b50610195610394565b604051908152602001610164565b3480156101af57600080fd5b50600054610150906001600160a01b031681565b3480156101cf57600080fd5b506101506101de366004611252565b6103b1565b3480156101ef57600080fd5b5061010d61058b565b34801561020457600080fd5b5061010d61059d565b34801561021957600080fd5b506101506105ea565b34801561022e57600080fd5b5061024261023d3660046112a0565b61061f565b604080516001600160a01b039093168352901515602083015201610164565b34801561026d57600080fd5b50610292604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610164919061132d565b3480156102ab57600080fd5b5061010d6102ba366004611340565b6106ed565b3480156102cb57600080fd5b506101506102da366004611252565b61085d565b3480156102eb57600080fd5b506101506108f2565b34801561030057600080fd5b5061010d61030f366004611340565b61091b565b34801561032057600080fd5b5061010d61032f366004611340565b6109a0565b600080516020611e018339815191525467ffffffffffffffff161561036b5760405162dc149f60e41b815260040160405180910390fd5b610373610a0a565b565b61037d610aa7565b61038682610b4c565b6103908282610b54565b5050565b600061039e610c16565b50600080516020611de183398151915290565b600080836040516020016103c5919061135b565b60408051601f1981840301815291815281516020928301206001600160a01b0386811660009081526001855283812083825290945291909220549192501615610437576001600160a01b0380841660009081526001602090815260408083209483529390529190912054169050610585565b600060405180602001610449906110e0565b601f1982820381018352601f9091011660408190526000546001600160a01b038781166024840152169063189acdbd60e31b9060440160408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352516104be939201611377565b60408051601f19818403018152908290526104dc929160200161139b565b60408051601f19818403018152908290526001600160601b0319606087901b16602083015260348201849052915060009060540160408051808303601f190181529082905280516020918201208451858301206001600160f81b0319928401929092526001600160601b03193060601b16602184015260358301819052605583019190915291506075016040516020818303038152906040528051906020012060001c93505050505b92915050565b610593610c5f565b6103736000610c91565b33806105a76108f2565b6001600160a01b0316146105de5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6105e781610c91565b50565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600080600083604051602001610635919061135b565b60408051601f198184030181529181528151602092830120336000908152600184528281208282529093529120549091506001600160a01b0316156106a257336000908152600160209081526040808320938352929052908120546001600160a01b031694909350915050565b60006106ae8533610cc9565b33600090815260016020818152604080842096845295905293902080546001600160a01b0319166001600160a01b038316179055959194509092505050565b600080516020611e018339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156107215750825b905060008267ffffffffffffffff16600114801561073e5750303b155b90508115801561074c575080155b1561076a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561079457845460ff60401b1916600160401b1785555b61079c610e15565b6107a533610e1d565b6107ad610e15565b85306040516107bb906110ed565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107ee573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055831561085557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60008083604051602001610871919061135b565b60408051601f1981840301815291815281516020928301206001600160a01b038681166000908152600185528381208382529094529190922054919250166108c5576108bd84846103b1565b915050610585565b6001600160a01b039283166000908152600160209081526040808320938352929052205490911692915050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061060f565b610923610c5f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556109676105ea565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6109a8610c5f565b600054604051631b2ce7f360e11b81526001600160a01b03838116600483015290911690633659cfe690602401600060405180830381600087803b1580156109ef57600080fd5b505af1158015610a03573d6000803e3d6000fd5b5050505050565b600080516020611e018339815191528054600160401b900460ff1615610a435760405163f92ee8a960e01b815260040160405180910390fd5b805467ffffffffffffffff908116146105e757805467ffffffffffffffff191667ffffffffffffffff90811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610b2e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b22600080516020611de1833981519152546001600160a01b031690565b6001600160a01b031614155b156103735760405163703e46dd60e11b815260040160405180910390fd5b6105e7610c5f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610bae575060408051601f3d908101601f19168201909252610bab918101906113ca565b60015b610bd657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016105d5565b600080516020611de18339815191528114610c0757604051632a87526960e21b8152600481018290526024016105d5565b610c118383610e2e565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103735760405163703e46dd60e11b815260040160405180910390fd5b33610c686105ea565b6001600160a01b0316146103735760405163118cdaa760e01b81523360048201526024016105d5565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561039082610e84565b60008083604051602001610cdd919061135b565b60405160208183030381529060405280519060200120905060008382604051602001610d2292919060609290921b6001600160601b0319168252601482015260340190565b60408051601f198184030181528282528051602091820120600080546001600160a01b038a8116602480890191909152865180890390910181526044909701865293860180516001600160e01b031663189acdbd60e31b1790529351919550938593929092169190610d93906110e0565b610d9e929190611377565b8190604051809103906000f5905080158015610dbe573d6000803e3d6000fd5b509050846001600160a01b0316816001600160a01b03167fad8a41b3cf9ccd262272a1aa8601a0191fac66c39f2b13491a904c1055bb97cd88604051610e04919061132d565b60405180910390a395945050505050565b610373610ef5565b610e25610ef5565b6105e781610f2c565b610e3782610f5e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e7c57610c118282610fc3565b610390611039565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611e0183398151915254600160401b900460ff1661037357604051631afcd79f60e31b815260040160405180910390fd5b610f34610ef5565b6001600160a01b0381166105de57604051631e4fbdf760e01b8152600060048201526024016105d5565b806001600160a01b03163b600003610f9457604051634c9c8ce360e01b81526001600160a01b03821660048201526024016105d5565b600080516020611de183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610fe0919061135b565b600060405180830381855af49150503d806000811461101b576040519150601f19603f3d011682016040523d82523d6000602084013e611020565b606091505b5091509150611030858383611058565b95945050505050565b34156103735760405163b398979f60e01b815260040160405180910390fd5b60608261106d57611068826110b7565b6110b0565b815115801561108457506001600160a01b0384163b155b156110ad57604051639996b31560e01b81526001600160a01b03851660048201526024016105d5565b50805b9392505050565b8051156110c75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6105c5806113e483390190565b610438806119a983390190565b80356001600160a01b038116811461111157600080fd5b919050565b6000806040838503121561112957600080fd5b611132836110fa565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008067ffffffffffffffff84111561117157611171611140565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156111a0576111a0611140565b6040528381529050808284018510156111b857600080fd5b83836020830137600060208583010152509392505050565b600080604083850312156111e357600080fd5b6111ec836110fa565b9150602083013567ffffffffffffffff81111561120857600080fd5b8301601f8101851361121957600080fd5b61122885823560208401611156565b9150509250929050565b600082601f83011261124357600080fd5b6110b083833560208501611156565b6000806040838503121561126557600080fd5b823567ffffffffffffffff81111561127c57600080fd5b61128885828601611232565b925050611297602084016110fa565b90509250929050565b6000602082840312156112b257600080fd5b813567ffffffffffffffff8111156112c957600080fd5b6112d584828501611232565b949350505050565b60005b838110156112f85781810151838201526020016112e0565b50506000910152565b600081518084526113198160208601602086016112dd565b601f01601f19169290920160200192915050565b6020815260006110b06020830184611301565b60006020828403121561135257600080fd5b6110b0826110fa565b6000825161136d8184602087016112dd565b9190910192915050565b6001600160a01b03831681526040602082018190526000906112d590830184611301565b600083516113ad8184602088016112dd565b8351908301906113c18183602088016112dd565b01949350505050565b6000602082840312156113dc57600080fd5b505191905056fe60a06040526040516105c53803806105c583398101604081905261002291610387565b61002c828261003e565b506001600160a01b0316608052610484565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e7919061044d565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d9919061044d565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610468565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b038111156103bf57600080fd5b8301601f810185136103d057600080fd5b80516001600160401b038111156103e9576103e961034d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104175761041761034d565b60405281815282820160200187101561042f57600080fd5b610440826020830160208601610363565b8093505050509250929050565b60006020828403121561045f57600080fd5b61030182610331565b6000825161047a818460208701610363565b9190910192915050565b60805161012761049e6000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f0959ca51a58dfa33f8868f1214c44e6abd5c2555618646d963c304a98aa25ac64736f6c634300081c0033608060405234801561001057600080fd5b5060405161043838038061043883398101604081905261002f91610165565b806001600160a01b03811661005f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006881610079565b50610072826100c9565b5050610198565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036100ff5760405163211eb15960e21b81526001600160a01b0382166004820152602401610056565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016057600080fd5b919050565b6000806040838503121561017857600080fd5b61018183610149565b915061018f60208401610149565b90509250929050565b610291806101a76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212207f9e29c272144c167454a78a6120d9d066cbed12b713983129ffb88bb0f564af64736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122067d2d7e0cf9895a9f21a74a6a2856271b17fa1f3949ac0846ed37ba3511eedd264736f6c634300081c0033",
  "deployedBytecode": "0x6080604052600436106100f35760003560e01c80638da5cb5b1161008a578063dbe6e7f911610059578063dbe6e7f9146102bf578063e30c3978146102df578063f2fde38b146102f4578063fa81f7d91461031457600080fd5b80638da5cb5b1461020d578063a66c4f5014610222578063ad3cb1cc14610261578063c4d66de81461029f57600080fd5b806359659e90116100c657806359659e90146101a357806370d367c3146101c3578063715018a6146101e357806379ba5097146101f857600080fd5b806331f44900146100f8578063391cb3581461010f5780634f1ef2861461016d57806352d1902d14610180575b600080fd5b34801561010457600080fd5b5061010d610334565b005b34801561011b57600080fd5b5061015061012a366004611116565b60016020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61010d61017b3660046111d0565b610375565b34801561018c57600080fd5b50610195610394565b604051908152602001610164565b3480156101af57600080fd5b50600054610150906001600160a01b031681565b3480156101cf57600080fd5b506101506101de366004611252565b6103b1565b3480156101ef57600080fd5b5061010d61058b565b34801561020457600080fd5b5061010d61059d565b34801561021957600080fd5b506101506105ea565b34801561022e57600080fd5b5061024261023d3660046112a0565b61061f565b604080516001600160a01b039093168352901515602083015201610164565b34801561026d57600080fd5b50610292604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610164919061132d565b3480156102ab57600080fd5b5061010d6102ba366004611340565b6106ed565b3480156102cb57600080fd5b506101506102da366004611252565b61085d565b3480156102eb57600080fd5b506101506108f2565b34801561030057600080fd5b5061010d61030f366004611340565b61091b565b34801561032057600080fd5b5061010d61032f366004611340565b6109a0565b600080516020611e018339815191525467ffffffffffffffff161561036b5760405162dc149f60e41b815260040160405180910390fd5b610373610a0a565b565b61037d610aa7565b61038682610b4c565b6103908282610b54565b5050565b600061039e610c16565b50600080516020611de183398151915290565b600080836040516020016103c5919061135b565b60408051601f1981840301815291815281516020928301206001600160a01b0386811660009081526001855283812083825290945291909220549192501615610437576001600160a01b0380841660009081526001602090815260408083209483529390529190912054169050610585565b600060405180602001610449906110e0565b601f1982820381018352601f9091011660408190526000546001600160a01b038781166024840152169063189acdbd60e31b9060440160408051601f19818403018152918152602080830180516001600160e01b03166001600160e01b031990951694909417909352516104be939201611377565b60408051601f19818403018152908290526104dc929160200161139b565b60408051601f19818403018152908290526001600160601b0319606087901b16602083015260348201849052915060009060540160408051808303601f190181529082905280516020918201208451858301206001600160f81b0319928401929092526001600160601b03193060601b16602184015260358301819052605583019190915291506075016040516020818303038152906040528051906020012060001c93505050505b92915050565b610593610c5f565b6103736000610c91565b33806105a76108f2565b6001600160a01b0316146105de5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6105e781610c91565b50565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600080600083604051602001610635919061135b565b60408051601f198184030181529181528151602092830120336000908152600184528281208282529093529120549091506001600160a01b0316156106a257336000908152600160209081526040808320938352929052908120546001600160a01b031694909350915050565b60006106ae8533610cc9565b33600090815260016020818152604080842096845295905293902080546001600160a01b0319166001600160a01b038316179055959194509092505050565b600080516020611e018339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156107215750825b905060008267ffffffffffffffff16600114801561073e5750303b155b90508115801561074c575080155b1561076a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561079457845460ff60401b1916600160401b1785555b61079c610e15565b6107a533610e1d565b6107ad610e15565b85306040516107bb906110ed565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156107ee573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b0392909216919091179055831561085557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b60008083604051602001610871919061135b565b60408051601f1981840301815291815281516020928301206001600160a01b038681166000908152600185528381208382529094529190922054919250166108c5576108bd84846103b1565b915050610585565b6001600160a01b039283166000908152600160209081526040808320938352929052205490911692915050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061060f565b610923610c5f565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b03831690811782556109676105ea565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6109a8610c5f565b600054604051631b2ce7f360e11b81526001600160a01b03838116600483015290911690633659cfe690602401600060405180830381600087803b1580156109ef57600080fd5b505af1158015610a03573d6000803e3d6000fd5b5050505050565b600080516020611e018339815191528054600160401b900460ff1615610a435760405163f92ee8a960e01b815260040160405180910390fd5b805467ffffffffffffffff908116146105e757805467ffffffffffffffff191667ffffffffffffffff90811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610b2e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b22600080516020611de1833981519152546001600160a01b031690565b6001600160a01b031614155b156103735760405163703e46dd60e11b815260040160405180910390fd5b6105e7610c5f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610bae575060408051601f3d908101601f19168201909252610bab918101906113ca565b60015b610bd657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016105d5565b600080516020611de18339815191528114610c0757604051632a87526960e21b8152600481018290526024016105d5565b610c118383610e2e565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103735760405163703e46dd60e11b815260040160405180910390fd5b33610c686105ea565b6001600160a01b0316146103735760405163118cdaa760e01b81523360048201526024016105d5565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561039082610e84565b60008083604051602001610cdd919061135b565b60405160208183030381529060405280519060200120905060008382604051602001610d2292919060609290921b6001600160601b0319168252601482015260340190565b60408051601f198184030181528282528051602091820120600080546001600160a01b038a8116602480890191909152865180890390910181526044909701865293860180516001600160e01b031663189acdbd60e31b1790529351919550938593929092169190610d93906110e0565b610d9e929190611377565b8190604051809103906000f5905080158015610dbe573d6000803e3d6000fd5b509050846001600160a01b0316816001600160a01b03167fad8a41b3cf9ccd262272a1aa8601a0191fac66c39f2b13491a904c1055bb97cd88604051610e04919061132d565b60405180910390a395945050505050565b610373610ef5565b610e25610ef5565b6105e781610f2c565b610e3782610f5e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e7c57610c118282610fc3565b610390611039565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020611e0183398151915254600160401b900460ff1661037357604051631afcd79f60e31b815260040160405180910390fd5b610f34610ef5565b6001600160a01b0381166105de57604051631e4fbdf760e01b8152600060048201526024016105d5565b806001600160a01b03163b600003610f9457604051634c9c8ce360e01b81526001600160a01b03821660048201526024016105d5565b600080516020611de183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610fe0919061135b565b600060405180830381855af49150503d806000811461101b576040519150601f19603f3d011682016040523d82523d6000602084013e611020565b606091505b5091509150611030858383611058565b95945050505050565b34156103735760405163b398979f60e01b815260040160405180910390fd5b60608261106d57611068826110b7565b6110b0565b815115801561108457506001600160a01b0384163b155b156110ad57604051639996b31560e01b81526001600160a01b03851660048201526024016105d5565b50805b9392505050565b8051156110c75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6105c5806113e483390190565b610438806119a983390190565b80356001600160a01b038116811461111157600080fd5b919050565b6000806040838503121561112957600080fd5b611132836110fa565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60008067ffffffffffffffff84111561117157611171611140565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156111a0576111a0611140565b6040528381529050808284018510156111b857600080fd5b83836020830137600060208583010152509392505050565b600080604083850312156111e357600080fd5b6111ec836110fa565b9150602083013567ffffffffffffffff81111561120857600080fd5b8301601f8101851361121957600080fd5b61122885823560208401611156565b9150509250929050565b600082601f83011261124357600080fd5b6110b083833560208501611156565b6000806040838503121561126557600080fd5b823567ffffffffffffffff81111561127c57600080fd5b61128885828601611232565b925050611297602084016110fa565b90509250929050565b6000602082840312156112b257600080fd5b813567ffffffffffffffff8111156112c957600080fd5b6112d584828501611232565b949350505050565b60005b838110156112f85781810151838201526020016112e0565b50506000910152565b600081518084526113198160208601602086016112dd565b601f01601f19169290920160200192915050565b6020815260006110b06020830184611301565b60006020828403121561135257600080fd5b6110b0826110fa565b6000825161136d8184602087016112dd565b9190910192915050565b6001600160a01b03831681526040602082018190526000906112d590830184611301565b600083516113ad8184602088016112dd565b8351908301906113c18183602088016112dd565b01949350505050565b6000602082840312156113dc57600080fd5b505191905056fe60a06040526040516105c53803806105c583398101604081905261002291610387565b61002c828261003e565b506001600160a01b0316608052610484565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e7919061044d565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d9919061044d565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610468565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b038111156103bf57600080fd5b8301601f810185136103d057600080fd5b80516001600160401b038111156103e9576103e961034d565b604051601f8201601f19908116603f011681016001600160401b03811182821017156104175761041761034d565b60405281815282820160200187101561042f57600080fd5b610440826020830160208601610363565b8093505050509250929050565b60006020828403121561045f57600080fd5b61030182610331565b6000825161047a818460208701610363565b9190910192915050565b60805161012761049e6000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f0959ca51a58dfa33f8868f1214c44e6abd5c2555618646d963c304a98aa25ac64736f6c634300081c0033608060405234801561001057600080fd5b5060405161043838038061043883398101604081905261002f91610165565b806001600160a01b03811661005f57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006881610079565b50610072826100c9565b5050610198565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036100ff5760405163211eb15960e21b81526001600160a01b0382166004820152602401610056565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016057600080fd5b919050565b6000806040838503121561017857600080fd5b61018183610149565b915061018f60208401610149565b90509250929050565b610291806101a76000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212207f9e29c272144c167454a78a6120d9d066cbed12b713983129ffb88bb0f564af64736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122067d2d7e0cf9895a9f21a74a6a2856271b17fa1f3949ac0846ed37ba3511eedd264736f6c634300081c0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
