Lawrence Forman 901d400d62
Address spot check feedback (#251)
* UniswapV3 VIP (#237)

* `@0x/contracts-zero-ex`: Add UniswapV3Feature

* `@0x/contracts-zero-ex`: Add UniswapV3 VIP
`@0x/contract-artifacts`: Regenerate.
`@0x/contract-wrappers`: Regenerate.
`@0x/asset-swapper`: Add UniswapV3 VIP support.

* address review comments and appease linter

* `@0x/contracts-zero-ex`: Add UniswapV3Feature tests

* Multiplex UniswapV3 (#241)

* Add UniswapV3 support to Multiplex batchFill

* Add AssetSwapper support for Multiplex UniswapV3

* fix repo scripts that use PKG= env var (#242)

Co-authored-by: Lawrence Forman <me@merklejerk.com>

* `@0x/asset-swapper`: Adjust uniswap gas overhead

Co-authored-by: Lawrence Forman <me@merklejerk.com>
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com>

* OTC orders feature (#244)

* Add OTC orders feature contracts

* Address PR feedback

* Remove partial fills for takerSigned variant

* Add function to query the min valid nonce

* Add ETH support

* Tightly pack expiry, nonceBucket, and nonce

* Address PR feedback

* OTC orders unit tests

* Bump prettier version

* Skip unnecessary math if takerTokenFillAmount == order.takerAmount

* appease CI

* Update contract-artifacts and contract-wrappers and CHANGELOGs

* `@0x/contracts-zero-ex`: Address spot check feedback

* `regen wrappers

* prettier

* `@0x/asset-swapper`: prettier and tweak gas schedule slightly for uni3

Co-authored-by: Lawrence Forman <me@merklejerk.com>
Co-authored-by: mzhu25 <mchl.zhu.96@gmail.com>
2021-06-02 14:21:14 +10:00

385 lines
54 KiB
JSON

{
"schemaVersion": "2.0.0",
"contractName": "ERC1155Mintable",
"compilerOutput": {
"abi": [
{
"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": "address", "name": "operator", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "from", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "to", "type": "address" },
{ "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" },
{ "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" }
],
"name": "TransferBatch",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": true, "internalType": "address", "name": "operator", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "from", "type": "address" },
{ "indexed": true, "internalType": "address", "name": "to", "type": "address" },
{ "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" },
{ "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }
],
"name": "TransferSingle",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{ "indexed": false, "internalType": "string", "name": "value", "type": "string" },
{ "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }
],
"name": "URI",
"type": "event"
},
{
"constant": true,
"inputs": [],
"name": "ERC1155_BATCH_RECEIVED",
"outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "ERC1155_RECEIVED",
"outputs": [{ "internalType": "bytes4", "name": "", "type": "bytes4" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "owner", "type": "address" },
{ "internalType": "uint256", "name": "id", "type": "uint256" }
],
"name": "balanceOf",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address[]", "name": "owners", "type": "address[]" },
{ "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }
],
"name": "balanceOfBatch",
"outputs": [{ "internalType": "uint256[]", "name": "balances_", "type": "uint256[]" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "string", "name": "uri", "type": "string" },
{ "internalType": "bool", "name": "isNF", "type": "bool" }
],
"name": "create",
"outputs": [{ "internalType": "uint256", "name": "type_", "type": "uint256" }],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "uint256", "name": "type_", "type": "uint256" },
{ "internalType": "string", "name": "uri", "type": "string" }
],
"name": "createWithType",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"name": "creators",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "getNonFungibleBaseType",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "getNonFungibleIndex",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [
{ "internalType": "address", "name": "owner", "type": "address" },
{ "internalType": "address", "name": "operator", "type": "address" }
],
"name": "isApprovedForAll",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "isFungible",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "isNonFungible",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "isNonFungibleBaseType",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "isNonFungibleItem",
"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],
"payable": false,
"stateMutability": "pure",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"name": "maxIndex",
"outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "uint256", "name": "id", "type": "uint256" },
{ "internalType": "address[]", "name": "to", "type": "address[]" },
{ "internalType": "uint256[]", "name": "quantities", "type": "uint256[]" }
],
"name": "mintFungible",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "uint256", "name": "type_", "type": "uint256" },
{ "internalType": "address[]", "name": "to", "type": "address[]" }
],
"name": "mintNonFungible",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [{ "internalType": "uint256", "name": "id", "type": "uint256" }],
"name": "ownerOf",
"outputs": [{ "internalType": "address", "name": "", "type": "address" }],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "from", "type": "address" },
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint256[]", "name": "ids", "type": "uint256[]" },
{ "internalType": "uint256[]", "name": "values", "type": "uint256[]" },
{ "internalType": "bytes", "name": "data", "type": "bytes" }
],
"name": "safeBatchTransferFrom",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "from", "type": "address" },
{ "internalType": "address", "name": "to", "type": "address" },
{ "internalType": "uint256", "name": "id", "type": "uint256" },
{ "internalType": "uint256", "name": "value", "type": "uint256" },
{ "internalType": "bytes", "name": "data", "type": "bytes" }
],
"name": "safeTransferFrom",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{ "internalType": "address", "name": "operator", "type": "address" },
{ "internalType": "bool", "name": "approved", "type": "bool" }
],
"name": "setApprovalForAll",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "Mintable form of ERC1155 Shows how easy it is to mint new items",
"methods": {
"balanceOf(address,uint256)": {
"params": { "id": "ID of the Token", "owner": "The address of the token holder" },
"return": "The _owner's balance of the Token type requested"
},
"balanceOfBatch(address[],uint256[])": {
"params": { "ids": "ID of the Tokens", "owners": "The addresses of the token holders" },
"return": "The _owner's balance of the Token types requested"
},
"create(string,bool)": {
"details": "creates a new token",
"params": { "isNF": "is non-fungible token", "uri": "URI of token" },
"return": "type_ of token (a unique identifier)"
},
"createWithType(uint256,string)": {
"details": "creates a new token",
"params": { "type_": "of token", "uri": "URI of token" }
},
"getNonFungibleBaseType(uint256)": { "details": "Returns base type of non-fungible token" },
"getNonFungibleIndex(uint256)": { "details": "Returns index of non-fungible token" },
"isApprovedForAll(address,address)": {
"params": { "operator": "Address of authorized operator", "owner": "The owner of the Tokens" },
"return": "True if the operator is approved, false if not"
},
"isFungible(uint256)": { "details": "Returns true if token is fungible" },
"isNonFungible(uint256)": { "details": "Returns true if token is non-fungible" },
"isNonFungibleBaseType(uint256)": {
"details": "Returns true if input is base-type of a non-fungible token"
},
"isNonFungibleItem(uint256)": { "details": "Returns true if input is a non-fungible token" },
"mintFungible(uint256,address[],uint256[])": {
"details": "mints fungible tokens",
"params": {
"id": "token type",
"quantities": "amounts of minted tokens",
"to": "beneficiaries of minted tokens"
}
},
"mintNonFungible(uint256,address[])": {
"details": "mints a non-fungible token",
"params": { "to": "beneficiaries of minted tokens", "type_": "token type" }
},
"ownerOf(uint256)": { "details": "returns owner of a non-fungible token" },
"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": {
"details": "MUST emit TransferBatch event on success. Caller must be approved to manage the _from account's tokens (see isApprovedForAll). MUST throw if `_to` is the zero address. MUST throw if length of `_ids` is not the same as length of `_values`. MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_values` sent. MUST throw on any other error. When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return value is not `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`.",
"params": {
"data": "Additional data with no specified format, sent in call to `_to`",
"from": "Source addresses",
"ids": "IDs of each token type",
"to": "Target addresses",
"values": "Transfer amounts per token type"
}
},
"safeTransferFrom(address,address,uint256,uint256,bytes)": {
"details": "MUST emit TransferSingle event on success. Caller must be approved to manage the _from account's tokens (see isApprovedForAll). MUST throw if `_to` is the zero address. MUST throw if balance of sender for token `_id` is lower than the `_value` sent. MUST throw on any other error. When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return value is not `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`.",
"params": {
"data": "Additional data with no specified format, sent in call to `_to`",
"from": "Source address",
"id": "ID of the token type",
"to": "Target address",
"value": "Transfer amount"
}
},
"setApprovalForAll(address,bool)": {
"details": "MUST emit the ApprovalForAll event on success.",
"params": {
"approved": "True if the operator is approved, false to revoke approval",
"operator": "Address to add to the set of authorized operators"
}
}
}
},
"evm": {
"bytecode": {
"object": "0x608060405234801561001057600080fd5b50612448806100206000396000f3fe608060405234801561001057600080fd5b50600436106101765760003560e01c80639f4b286a116100d8578063e0a5c9491161008c578063f242432a11610066578063f242432a14610312578063f941908814610325578063fc67bf1c1461033857610176565b8063e0a5c949146102d7578063e44591f0146102ec578063e985e9c5146102ff57610176565b8063adebf6f2116100bd578063adebf6f21461029e578063cc10e401146102b1578063cd53d08e146102c457610176565b80639f4b286a14610278578063a22cb4651461028b57610176565b80636352211e1161012f5780637269a327116101145780637269a3271461023f57806378b27221146102525780639cca1c641461026557610176565b80636352211e1461020c5780636f969c2d1461022c57610176565b80632eb2c2d6116101605780632eb2c2d6146101b75780634e1273f4146101cc5780635e81b958146101ec57610176565b8062fdd58e1461017b57806308d7d469146101a4575b600080fd5b61018e610189366004611c80565b610340565b60405161019b91906123c9565b60405180910390f35b61018e6101b2366004611dac565b6103ca565b6101ca6101c5366004611b12565b6103dc565b005b6101df6101da366004611caa565b610943565b60405161019b91906120b1565b6101ff6101fa366004611dac565b610ae9565b60405161019b91906120f4565b61021f61021a366004611dac565b610b2f565b60405161019b9190611f57565b61018e61023a366004611dac565b610b57565b6101ff61024d366004611dac565b610b7c565b6101ca610260366004611e0e565b610bc1565b61018e610273366004611dac565b610e8d565b6101ca610286366004611e85565b610ea2565b6101ca610299366004611c45565b610f5e565b6101ff6102ac366004611dac565b610ff8565b61018e6102bf366004611d53565b61101e565b61021f6102d2366004611dac565b611113565b6102df61113b565b60405161019b91906120ff565b6101ff6102fa366004611dac565b61115f565b6101ff61030d366004611ade565b611187565b6101ca610320366004611bcb565b6111c2565b6101ca610333366004611dc4565b611624565b6102df6118ff565b600061034b82610ae9565b156103925760008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610385576000610388565b60015b60ff1690506103c4565b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60056020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff8716610432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061216a565b60405180910390fd5b84831461046b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906121a1565b73ffffffffffffffffffffffffffffffffffffffff88163314806104c4575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff1615156001145b6104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061220d565b60005b8581101561075e57600087878381811061051357fe5b905060200201359050600086868481811061052a57fe5b90506020020135905061053c8261115f565b1561062c578060011461057b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612244565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff8c81169116146105db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906121d6565b600082815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610754565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f16845290915290205461066c908263ffffffff61192316565b6001600084815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610723816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194790919063ffffffff16565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f1684529091529020555b50506001016104fd565b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040516107d9949392919061207f565b60405180910390a46108008773ffffffffffffffffffffffffffffffffffffffff16611963565b15610939576040517fbc197c8100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff89169063bc197c81906108689033908d908c908c908c908c908c908c90600401611fbd565b602060405180830381600087803b15801561088257600080fd5b505af1158015610896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ba9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505b5050505050505050565b606083821461097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906122d8565b6040805185815260208087028201019091528480156109a7578160200160208202803883390190505b50905060005b84811015610ae05760008484838181106109c357fe5b9050602002013590506109d581610ae9565b15610a53578686838181106109e657fe5b90506020020160206109fb9190810190611ac3565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614610a30576000610a33565b60015b60ff16838381518110610a4257fe5b602002602001018181525050610ad7565b600081815260016020526040812090888885818110610a6e57fe5b9050602002016020610a839190810190611ac3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054838381518110610aca57fe5b6020026020010181815250505b506001016109ad565b50949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156103c45750506fffffffffffffffffffffffffffffffff16151590565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156103c45750506fffffffffffffffffffffffffffffffff161590565b600085815260046020526040902054859073ffffffffffffffffffffffffffffffffffffffff163314610bf357600080fd5b610bfc86610ff8565b610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612335565b60005b84811015610e84576000868683818110610c4b57fe5b9050602002016020610c609190810190611ac3565b90506000858584818110610c7057fe5b60008c815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452825290912054910292909201359250610cbb9183915063ffffffff61194716565b60008a815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832093909355915133907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290610d22908e9087906123d2565b60405180910390a4610d498273ffffffffffffffffffffffffffffffffffffffff16611963565b15610e7a576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff84169063f23a6e6190610da990339081908f908890600401611f78565b602060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dfb9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610e78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505b5050600101610c35565b50505050505050565b6fffffffffffffffffffffffffffffffff1690565b60008381526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915590518291907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290610f1090889085906123d2565b60405180910390a48015610f5957827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8383604051610f5092919061214e565b60405180910390a25b505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855292529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610fec9085906120f4565b60405180910390a35050565b7f8000000000000000000000000000000000000000000000000000000000000000161590565b600380546001019081905560801b8115611055577f8000000000000000000000000000000000000000000000000000000000000000175b60008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915590518291907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906110c390869085906123d2565b60405180910390a4821561110c57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b858560405161110392919061214e565b60405180910390a25b9392505050565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7ff23a6e610000000000000000000000000000000000000000000000000000000081565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff851661120f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061216a565b73ffffffffffffffffffffffffffffffffffffffff8616331480611268575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff1615156001145b61129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061220d565b6112a78461115f565b1561139757826001146112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612244565b60008481526020819052604090205473ffffffffffffffffffffffffffffffffffffffff878116911614611346576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906121d6565b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905561144c565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020546113d7908463ffffffff61192316565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b8116855292528083209390935587168152205461141b9084611947565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516114c29291906123d2565b60405180910390a46114e98573ffffffffffffffffffffffffffffffffffffffff16611963565b1561161c576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e619061154d9033908b908a908a908a908a9060040161202d565b602060405180830381600087803b15801561156757600080fd5b505af115801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061159f9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505050505050565b600083815260046020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461165657600080fd5b61165f8461115f565b611695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061227b565b600084815260056020526040812054600101905b838110156118c55760008585838181106116bf57fe5b90506020020160206116d49190810190611ac3565b828401881760008181526020819052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091559051939450919233907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906117629086906001906123d2565b60405180910390a46117898273ffffffffffffffffffffffffffffffffffffffff16611963565b156118bb576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff84169063f23a6e61906117ea90339081908790600190600401611f78565b602060405180830381600087803b15801561180457600080fd5b505af1158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061183c9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146118b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505b50506001016116a9565b506000858152600560205260409020546118e690849063ffffffff61194716565b6000958652600560205260409095209490945550505050565b7fbc197c810000000000000000000000000000000000000000000000000000000081565b6000828211156119415761194161193c60028585611969565b611a0e565b50900390565b60008282018381101561110c5761110c61193c60008686611969565b3b151590565b606063e946c1bb60e01b8484846040516024016119889392919061212c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146103c457600080fd5b60008083601f840112611a4b578182fd5b50813567ffffffffffffffff811115611a62578182fd5b6020830191508360208083028501011115611a7c57600080fd5b9250929050565b60008083601f840112611a94578182fd5b50813567ffffffffffffffff811115611aab578182fd5b602083019150836020828501011115611a7c57600080fd5b600060208284031215611ad4578081fd5b61110c8383611a16565b60008060408385031215611af0578081fd5b611afa8484611a16565b9150611b098460208501611a16565b90509250929050565b60008060008060008060008060a0898b031215611b2d578384fd5b611b378a8a611a16565b9750611b468a60208b01611a16565b9650604089013567ffffffffffffffff80821115611b62578586fd5b611b6e8c838d01611a3a565b909850965060608b0135915080821115611b86578586fd5b611b928c838d01611a3a565b909650945060808b0135915080821115611baa578384fd5b50611bb78b828c01611a83565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611be3578182fd5b8635611bee816123e0565b95506020870135611bfe816123e0565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c27578283fd5b611c3389828a01611a83565b979a9699509497509295939492505050565b60008060408385031215611c57578182fd5b611c618484611a16565b915060208301358015158114611c75578182fd5b809150509250929050565b60008060408385031215611c92578182fd5b611c9c8484611a16565b946020939093013593505050565b60008060008060408587031215611cbf578384fd5b843567ffffffffffffffff80821115611cd6578586fd5b611ce288838901611a3a565b90965094506020870135915080821115611cfa578384fd5b50611d0787828801611a3a565b95989497509550505050565b600060208284031215611d24578081fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461110c578182fd5b600080600060408486031215611d67578283fd5b833567ffffffffffffffff811115611d7d578384fd5b611d8986828701611a83565b90945092505060208401358015158114611da1578182fd5b809150509250925092565b600060208284031215611dbd578081fd5b5035919050565b600080600060408486031215611dd8578283fd5b83359250602084013567ffffffffffffffff811115611df5578283fd5b611e0186828701611a3a565b9497909650939450505050565b600080600080600060608688031215611e25578081fd5b85359450602086013567ffffffffffffffff80821115611e43578283fd5b611e4f89838a01611a3a565b90965094506040880135915080821115611e67578283fd5b50611e7488828901611a3a565b969995985093965092949392505050565b600080600060408486031215611e99578081fd5b83359250602084013567ffffffffffffffff811115611eb6578182fd5b611e0186828701611a83565b60008284527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611ef3578081fd5b6020830280836020870137939093016020019283525090919050565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a06040830152611ff760a08301888a611ec2565b828103606084015261200a818789611ec2565b838103608085015261201d818688611f0f565b9c9b505050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261207360a083018486611f0f565b98975050505050505050565b600060408252612093604083018688611ec2565b82810360208401526120a6818587611ec2565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156120e95783518352602093840193909201916001016120cb565b509095945050505050565b901515815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016004851061213a57fe5b938152602081019290925260409091015290565b600060208252612162602083018486611f0f565b949350505050565b6020808252601f908201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604082015260600190565b6020808252818101527f544f4b454e5f414e445f56414c5545535f4c454e4754485f4d49534d41544348604082015260600190565b6020808252601d908201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604082015260600190565b60208082526016908201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604082015260600190565b6020808252601c908201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604082015260600190565b6020808252602d908201527f54524945445f544f5f4d494e545f4e4f4e5f46554e4749424c455f464f525f4660408201527f554e4749424c455f544f4b454e00000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4f574e4552535f414e445f4944535f4d5553545f484156455f53414d455f4c4560408201527f4e47544800000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602d908201527f54524945445f544f5f4d494e545f46554e4749424c455f464f525f4e4f4e5f4660408201527f554e4749424c455f544f4b454e00000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604082015260600190565b90815260200190565b918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8116811461240257600080fd5b5056fea365627a7a7231582025f4d82583e61cdd5f7ad8ca3b78797db282a0a66d2072f985f6981a2b734d226c6578706572696d656e74616cf564736f6c63430005110040"
},
"deployedBytecode": {
"object": "0x608060405234801561001057600080fd5b50600436106101765760003560e01c80639f4b286a116100d8578063e0a5c9491161008c578063f242432a11610066578063f242432a14610312578063f941908814610325578063fc67bf1c1461033857610176565b8063e0a5c949146102d7578063e44591f0146102ec578063e985e9c5146102ff57610176565b8063adebf6f2116100bd578063adebf6f21461029e578063cc10e401146102b1578063cd53d08e146102c457610176565b80639f4b286a14610278578063a22cb4651461028b57610176565b80636352211e1161012f5780637269a327116101145780637269a3271461023f57806378b27221146102525780639cca1c641461026557610176565b80636352211e1461020c5780636f969c2d1461022c57610176565b80632eb2c2d6116101605780632eb2c2d6146101b75780634e1273f4146101cc5780635e81b958146101ec57610176565b8062fdd58e1461017b57806308d7d469146101a4575b600080fd5b61018e610189366004611c80565b610340565b60405161019b91906123c9565b60405180910390f35b61018e6101b2366004611dac565b6103ca565b6101ca6101c5366004611b12565b6103dc565b005b6101df6101da366004611caa565b610943565b60405161019b91906120b1565b6101ff6101fa366004611dac565b610ae9565b60405161019b91906120f4565b61021f61021a366004611dac565b610b2f565b60405161019b9190611f57565b61018e61023a366004611dac565b610b57565b6101ff61024d366004611dac565b610b7c565b6101ca610260366004611e0e565b610bc1565b61018e610273366004611dac565b610e8d565b6101ca610286366004611e85565b610ea2565b6101ca610299366004611c45565b610f5e565b6101ff6102ac366004611dac565b610ff8565b61018e6102bf366004611d53565b61101e565b61021f6102d2366004611dac565b611113565b6102df61113b565b60405161019b91906120ff565b6101ff6102fa366004611dac565b61115f565b6101ff61030d366004611ade565b611187565b6101ca610320366004611bcb565b6111c2565b6101ca610333366004611dc4565b611624565b6102df6118ff565b600061034b82610ae9565b156103925760008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff848116911614610385576000610388565b60015b60ff1690506103c4565b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60056020526000908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff8716610432576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061216a565b60405180910390fd5b84831461046b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906121a1565b73ffffffffffffffffffffffffffffffffffffffff88163314806104c4575073ffffffffffffffffffffffffffffffffffffffff8816600090815260026020908152604080832033845290915290205460ff1615156001145b6104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061220d565b60005b8581101561075e57600087878381811061051357fe5b905060200201359050600086868481811061052a57fe5b90506020020135905061053c8261115f565b1561062c578060011461057b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612244565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff8c81169116146105db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906121d6565b600082815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8c16179055610754565b600082815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f16845290915290205461066c908263ffffffff61192316565b6001600084815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610723816001600085815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461194790919063ffffffff16565b600083815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8f1684529091529020555b50506001016104fd565b508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb898989896040516107d9949392919061207f565b60405180910390a46108008773ffffffffffffffffffffffffffffffffffffffff16611963565b15610939576040517fbc197c8100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff89169063bc197c81906108689033908d908c908c908c908c908c908c90600401611fbd565b602060405180830381600087803b15801561088257600080fd5b505af1158015610896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108ba9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505b5050505050505050565b606083821461097e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906122d8565b6040805185815260208087028201019091528480156109a7578160200160208202803883390190505b50905060005b84811015610ae05760008484838181106109c357fe5b9050602002013590506109d581610ae9565b15610a53578686838181106109e657fe5b90506020020160206109fb9190810190611ac3565b60008281526020819052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614610a30576000610a33565b60015b60ff16838381518110610a4257fe5b602002602001018181525050610ad7565b600081815260016020526040812090888885818110610a6e57fe5b9050602002016020610a839190810190611ac3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054838381518110610aca57fe5b6020026020010181815250505b506001016109ad565b50949350505050565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156103c45750506fffffffffffffffffffffffffffffffff16151590565b60009081526020819052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000001690565b60007f80000000000000000000000000000000000000000000000000000000000000008083161480156103c45750506fffffffffffffffffffffffffffffffff161590565b600085815260046020526040902054859073ffffffffffffffffffffffffffffffffffffffff163314610bf357600080fd5b610bfc86610ff8565b610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612335565b60005b84811015610e84576000868683818110610c4b57fe5b9050602002016020610c609190810190611ac3565b90506000858584818110610c7057fe5b60008c815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452825290912054910292909201359250610cbb9183915063ffffffff61194716565b60008a815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832093909355915133907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290610d22908e9087906123d2565b60405180910390a4610d498273ffffffffffffffffffffffffffffffffffffffff16611963565b15610e7a576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff84169063f23a6e6190610da990339081908f908890600401611f78565b602060405180830381600087803b158015610dc357600080fd5b505af1158015610dd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dfb9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610e78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505b5050600101610c35565b50505050505050565b6fffffffffffffffffffffffffffffffff1690565b60008381526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915590518291907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6290610f1090889085906123d2565b60405180910390a48015610f5957827f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8383604051610f5092919061214e565b60405180910390a25b505050565b33600081815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855292529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190610fec9085906120f4565b60405180910390a35050565b7f8000000000000000000000000000000000000000000000000000000000000000161590565b600380546001019081905560801b8115611055577f8000000000000000000000000000000000000000000000000000000000000000175b60008181526004602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000163390811790915590518291907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906110c390869085906123d2565b60405180910390a4821561110c57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b858560405161110392919061214e565b60405180910390a25b9392505050565b60046020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b7ff23a6e610000000000000000000000000000000000000000000000000000000081565b7f80000000000000000000000000000000000000000000000000000000000000009081161490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b73ffffffffffffffffffffffffffffffffffffffff851661120f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061216a565b73ffffffffffffffffffffffffffffffffffffffff8616331480611268575073ffffffffffffffffffffffffffffffffffffffff8616600090815260026020908152604080832033845290915290205460ff1615156001145b61129e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061220d565b6112a78461115f565b1561139757826001146112e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612244565b60008481526020819052604090205473ffffffffffffffffffffffffffffffffffffffff878116911614611346576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610429906121d6565b600084815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871617905561144c565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020546113d7908463ffffffff61192316565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b8116855292528083209390935587168152205461141b9084611947565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020555b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516114c29291906123d2565b60405180910390a46114e98573ffffffffffffffffffffffffffffffffffffffff16611963565b1561161c576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff87169063f23a6e619061154d9033908b908a908a908a908a9060040161202d565b602060405180830381600087803b15801561156757600080fd5b505af115801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061159f9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505050505050565b600083815260046020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461165657600080fd5b61165f8461115f565b611695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104299061227b565b600084815260056020526040812054600101905b838110156118c55760008585838181106116bf57fe5b90506020020160206116d49190810190611ac3565b828401881760008181526020819052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091559051939450919233907fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62906117629086906001906123d2565b60405180910390a46117898273ffffffffffffffffffffffffffffffffffffffff16611963565b156118bb576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff84169063f23a6e61906117ea90339081908790600190600401611f78565b602060405180830381600087803b15801561180457600080fd5b505af1158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061183c9190810190611d13565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e6100000000000000000000000000000000000000000000000000000000146118b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042990612392565b505b50506001016116a9565b506000858152600560205260409020546118e690849063ffffffff61194716565b6000958652600560205260409095209490945550505050565b7fbc197c810000000000000000000000000000000000000000000000000000000081565b6000828211156119415761194161193c60028585611969565b611a0e565b50900390565b60008282018381101561110c5761110c61193c60008686611969565b3b151590565b606063e946c1bb60e01b8484846040516024016119889392919061212c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b805160208201fd5b803573ffffffffffffffffffffffffffffffffffffffff811681146103c457600080fd5b60008083601f840112611a4b578182fd5b50813567ffffffffffffffff811115611a62578182fd5b6020830191508360208083028501011115611a7c57600080fd5b9250929050565b60008083601f840112611a94578182fd5b50813567ffffffffffffffff811115611aab578182fd5b602083019150836020828501011115611a7c57600080fd5b600060208284031215611ad4578081fd5b61110c8383611a16565b60008060408385031215611af0578081fd5b611afa8484611a16565b9150611b098460208501611a16565b90509250929050565b60008060008060008060008060a0898b031215611b2d578384fd5b611b378a8a611a16565b9750611b468a60208b01611a16565b9650604089013567ffffffffffffffff80821115611b62578586fd5b611b6e8c838d01611a3a565b909850965060608b0135915080821115611b86578586fd5b611b928c838d01611a3a565b909650945060808b0135915080821115611baa578384fd5b50611bb78b828c01611a83565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611be3578182fd5b8635611bee816123e0565b95506020870135611bfe816123e0565b94506040870135935060608701359250608087013567ffffffffffffffff811115611c27578283fd5b611c3389828a01611a83565b979a9699509497509295939492505050565b60008060408385031215611c57578182fd5b611c618484611a16565b915060208301358015158114611c75578182fd5b809150509250929050565b60008060408385031215611c92578182fd5b611c9c8484611a16565b946020939093013593505050565b60008060008060408587031215611cbf578384fd5b843567ffffffffffffffff80821115611cd6578586fd5b611ce288838901611a3a565b90965094506020870135915080821115611cfa578384fd5b50611d0787828801611a3a565b95989497509550505050565b600060208284031215611d24578081fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461110c578182fd5b600080600060408486031215611d67578283fd5b833567ffffffffffffffff811115611d7d578384fd5b611d8986828701611a83565b90945092505060208401358015158114611da1578182fd5b809150509250925092565b600060208284031215611dbd578081fd5b5035919050565b600080600060408486031215611dd8578283fd5b83359250602084013567ffffffffffffffff811115611df5578283fd5b611e0186828701611a3a565b9497909650939450505050565b600080600080600060608688031215611e25578081fd5b85359450602086013567ffffffffffffffff80821115611e43578283fd5b611e4f89838a01611a3a565b90965094506040880135915080821115611e67578283fd5b50611e7488828901611a3a565b969995985093965092949392505050565b600080600060408486031215611e99578081fd5b83359250602084013567ffffffffffffffff811115611eb6578182fd5b611e0186828701611a83565b60008284527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611ef3578081fd5b6020830280836020870137939093016020019283525090919050565b600082845282826020860137806020848601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011685010190509392505050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff94851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b600073ffffffffffffffffffffffffffffffffffffffff808b168352808a1660208401525060a06040830152611ff760a08301888a611ec2565b828103606084015261200a818789611ec2565b838103608085015261201d818688611f0f565b9c9b505050505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525085604083015284606083015260a0608083015261207360a083018486611f0f565b98975050505050505050565b600060408252612093604083018688611ec2565b82810360208401526120a6818587611ec2565b979650505050505050565b602080825282518282018190526000918401906040840190835b818110156120e95783518352602093840193909201916001016120cb565b509095945050505050565b901515815260200190565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b606081016004851061213a57fe5b938152602081019290925260409091015290565b600060208252612162602083018486611f0f565b949350505050565b6020808252601f908201527f43414e4e4f545f5452414e534645525f544f5f414444524553535f5a45524f00604082015260600190565b6020808252818101527f544f4b454e5f414e445f56414c5545535f4c454e4754485f4d49534d41544348604082015260600190565b6020808252601d908201527f4e46545f4e4f545f4f574e45445f42595f46524f4d5f41444452455353000000604082015260600190565b60208082526016908201527f494e53554646494349454e545f414c4c4f57414e434500000000000000000000604082015260600190565b6020808252601c908201527f414d4f554e545f455155414c5f544f5f4f4e455f524551554952454400000000604082015260600190565b6020808252602d908201527f54524945445f544f5f4d494e545f4e4f4e5f46554e4749424c455f464f525f4660408201527f554e4749424c455f544f4b454e00000000000000000000000000000000000000606082015260800190565b60208082526024908201527f4f574e4552535f414e445f4944535f4d5553545f484156455f53414d455f4c4560408201527f4e47544800000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602d908201527f54524945445f544f5f4d494e545f46554e4749424c455f464f525f4e4f4e5f4660408201527f554e4749424c455f544f4b454e00000000000000000000000000000000000000606082015260800190565b60208082526019908201527f4241445f52454345495645525f52455455524e5f56414c554500000000000000604082015260600190565b90815260200190565b918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8116811461240257600080fd5b5056fea365627a7a7231582025f4d82583e61cdd5f7ad8ca3b78797db282a0a66d2072f985f6981a2b734d226c6578706572696d656e74616cf564736f6c63430005110040"
}
}
},
"compiler": {
"name": "solc",
"version": "0.5.17+commit.d19bba13",
"settings": {
"optimizer": {
"enabled": true,
"runs": 1000000,
"details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true }
},
"outputSelection": {
"*": {
"*": [
"abi",
"devdoc",
"evm.bytecode.object",
"evm.bytecode.sourceMap",
"evm.deployedBytecode.object",
"evm.deployedBytecode.sourceMap"
]
}
},
"evmVersion": "istanbul"
}
},
"chains": {}
}