{
  "_format": "hh-sol-artifact-1",
  "contractName": "NotionalTradeModule",
  "sourceName": "contracts/protocol/modules/v1/NotionalTradeModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        },
        {
          "internalType": "contract IWrappedfCashFactory",
          "name": "_wrappedfCashFactory",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_weth",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_anySetAllowed",
          "type": "bool"
        }
      ],
      "name": "AnySetAllowedUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IWrappedfCashComplete",
          "name": "_fCashPosition",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fCashAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_sentAmount",
          "type": "uint256"
        }
      ],
      "name": "FCashMinted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IWrappedfCashComplete",
          "name": "_fCashPosition",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_fCashAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_receivedAmount",
          "type": "uint256"
        }
      ],
      "name": "FCashRedeemed",
      "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": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_added",
          "type": "bool"
        }
      ],
      "name": "SetTokenStatusUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "allowedSetTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "anySetAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isEquity",
          "type": "bool"
        }
      ],
      "name": "componentIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setTokenAmount",
          "type": "uint256"
        },
        {
          "internalType": "contract IERC20",
          "name": "_component",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isEquity",
          "type": "bool"
        }
      ],
      "name": "componentRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getFCashPositions",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "positions",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_currencyId",
          "type": "uint16"
        },
        {
          "internalType": "uint40",
          "name": "_maturity",
          "type": "uint40"
        },
        {
          "internalType": "uint256",
          "name": "_mintAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_sendToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxSendAmount",
          "type": "uint256"
        }
      ],
      "name": "mintFCashPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "moduleIssueHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "moduleRedeemHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint16",
          "name": "_currencyId",
          "type": "uint16"
        },
        {
          "internalType": "uint40",
          "name": "_maturity",
          "type": "uint40"
        },
        {
          "internalType": "uint256",
          "name": "_redeemAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_receiveToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_minReceiveAmount",
          "type": "uint256"
        }
      ],
      "name": "redeemFCashPosition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "redeemMaturedPositions",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "redeemToUnderlying",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "contract IDebtIssuanceModule",
          "name": "_debtIssuanceModule",
          "type": "address"
        }
      ],
      "name": "registerToModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_toUnderlying",
          "type": "bool"
        }
      ],
      "name": "setRedeemToUnderlying",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_status",
          "type": "bool"
        }
      ],
      "name": "updateAllowedSetToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_anySetAllowed",
          "type": "bool"
        }
      ],
      "name": "updateAnySetAllowed",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "weth",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "wrappedfCashFactory",
      "outputs": [
        {
          "internalType": "contract IWrappedfCashFactory",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b5060405162003808380380620038088339810160408190526200003491620000cf565b600080546001600160a01b0319166001600160a01b038516178155600180556200005d620000cb565b600280546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160601b0319606092831b8116608052911b1660a052506200013b565b3390565b600080600060608486031215620000e4578283fd5b8351620000f18162000122565b6020850151909350620001048162000122565b6040850151909250620001178162000122565b809150509250925092565b6001600160a01b03811681146200013857600080fd5b50565b60805160601c60a05160601c61368a6200017e600039806103e752806113b752806122df525080610d835280610f49528061147f5280611fb4525061368a6000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80639590f11b116100c3578063c4d66de81161007c578063c4d66de814610277578063c690a74c1461028a578063ee78244f1461029d578063f2fde38b146102b0578063f633e0de146102c3578063f77c4791146102cb5761014d565b80639590f11b1461021c57806395c70b3a1461023c578063a2306c891461025c578063b1dd4d921461026f578063c137f4d714610152578063c153dd07146101a55761014d565b80635aeced65116101155780635aeced65146101cb5780635b136512146101de57806363c89f72146101f1578063715018a614610204578063847ef08d1461020c5780638da5cb5b146102145761014d565b80630fb96b2114610152578063214b26e0146101675780633fc8cef3146101905780633fe6106b146101a55780635199e418146101b8575b600080fd5b610165610160366004612e23565b6102d3565b005b61017a610175366004612d89565b6102e4565b604051610187919061351e565b60405180910390f35b6101986103e5565b6040516101879190612f06565b6101656101b3366004612df8565b610409565b6101656101c6366004612c11565b610421565b61017a6101d9366004612d89565b610493565b6101656101ec366004612d5c565b61057b565b6101656101ff366004612d2f565b610680565b6101656106b6565b610165610735565b610198610872565b61022f61022a366004612a2f565b610881565b6040516101879190612fc1565b61024f61024a366004612a2f565b610896565b6040516101879190612f74565b61016561026a366004612a2f565b6108a9565b61022f6108ec565b610165610285366004612a2f565b6108f5565b610165610298366004612d2f565b610b6d565b61022f6102ab366004612a2f565b610cb5565b6101656102be366004612a2f565b610cca565b610198610d81565b610198610da5565b836102dd81610db4565b5050505050565b6000600260015414156103125760405162461bcd60e51b8152600401610309906134cc565b60405180910390fd5b60026001558661032181610ef9565b60405163df5e9b2960e01b81526001600160a01b0389169063df5e9b299061034d908790600401612f06565b60206040518083038186803b15801561036557600080fd5b505afa158015610379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039d9190612c2d565b6103b95760405162461bcd60e51b815260040161030990612fdf565b60006103c58888610f44565b90506103d48982878988610ff1565b600180559998505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8161041381610db4565b61041c836111bc565b505050565b610429611476565b6002546001600160a01b039081169116146104565760405162461bcd60e51b815260040161030990613249565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b6000600260015414156104b85760405162461bcd60e51b8152600401610309906134cc565b6002600155866104c781610ef9565b60006104d3888861147a565b60405163df5e9b2960e01b81529091506001600160a01b038a169063df5e9b2990610502908490600401612f06565b60206040518083038186803b15801561051a57600080fd5b505afa15801561052e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105529190612c2d565b61056e5760405162461bcd60e51b81526004016103099061332e565b6103d48982878988611552565b8161058581610ef9565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c906105b1908590600401612f06565b60206040518083038186803b1580156105c957600080fd5b505afa1580156105dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106019190612c2d565b61061d5760405162461bcd60e51b8152600401610309906131a7565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610649908690600401612f06565b600060405180830381600087803b15801561066357600080fd5b505af1158015610677573d6000803e3d6000fd5b50505050505050565b8161068a81610ef9565b506001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6106be611476565b6002546001600160a01b039081169116146106eb5760405162461bcd60e51b815260040161030990613249565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b3361073f81610f1f565b33610749816111bc565b6060816001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561078457600080fd5b505afa158015610798573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c09190810190612a67565b905060005b815181101561086c576107f38282815181106107dd57fe5b60200260200101516001600160a01b03166116fa565b156108645781818151811061080457fe5b60200260200101516001600160a01b031663e0799620846040518263ffffffff1660e01b81526004016108379190612f06565b600060405180830381600087803b15801561085157600080fd5b505af1925050508015610862575060015b505b6001016107c5565b50505050565b6002546001600160a01b031690565b60036020526000908152604090205460ff1681565b60606108a182611700565b90505b919050565b600260015414156108cc5760405162461bcd60e51b8152600401610309906134cc565b6002600155806108db81610f1f565b6108e4826111bc565b505060018055565b60055460ff1681565b803361090182826118bf565b8261090b816118e9565b60055460ff1661094d576001600160a01b03841660009081526004602052604090205460ff1661094d5760405162461bcd60e51b81526004016103099061327e565b836001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b50505050836001600160a01b031663d7f1b27c6109e56040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b8152506119aa565b6040518263ffffffff1660e01b8152600401610a019190612f06565b60206040518083038186803b158015610a1957600080fd5b505afa158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190612c2d565b610a6d5760405162461bcd60e51b8152600401610309906131a7565b6060846001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b158015610aa857600080fd5b505afa158015610abc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae49190810190612a67565b905060005b8151811015610b6557818181518110610afe57fe5b60200260200101516001600160a01b031663d9b1b6e0876040518263ffffffff1660e01b8152600401610b319190612f06565b600060405180830381600087803b158015610b4b57600080fd5b505af1925050508015610b5c575060015b50600101610ae9565b505050505050565b610b75611476565b6002546001600160a01b03908116911614610ba25760405162461bcd60e51b815260040161030990613249565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90610bd2908590600401612f06565b60206040518083038186803b158015610bea57600080fd5b505afa158015610bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c229190612c2d565b80610c4557506001600160a01b03821660009081526004602052604090205460ff165b610c615760405162461bcd60e51b81526004016103099061321f565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b60046020526000908152604090205460ff1681565b610cd2611476565b6002546001600160a01b03908116911614610cff5760405162461bcd60e51b815260040161030990613249565b6001600160a01b038116610d255760405162461bcd60e51b81526004016103099061306c565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290610de2903390600401612f06565b60206040518083038186803b158015610dfa57600080fd5b505afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e329190612e75565b6002811115610e3d57fe5b14610e5a5760405162461bcd60e51b815260040161030990613170565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990610e8a903390600401612f06565b60206040518083038186803b158015610ea257600080fd5b505afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612c2d565b610ef65760405162461bcd60e51b81526004016103099061340e565b50565b610f0381336119c1565b610f1f5760405162461bcd60e51b815260040161030990613495565b610f2881611a4f565b610ef65760405162461bcd60e51b815260040161030990613024565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663422a73a485856040518363ffffffff1660e01b8152600401610f95929190613503565b602060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190612a4b565b9150505b92915050565b600082611000575060006111b3565b600061100c8686611b53565b905061101a87878786611bba565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190611049908b90600401612f06565b60206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190612e94565b90506000876001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016110c99190612f06565b60206040518083038186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111199190612e94565b90506111288989878987611d18565b6111358988848b85611e1a565b509350848411156111585760405162461bcd60e51b815260040161030990613118565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167fe8156c079033d9ccf08a8bdc671fda8663f61b29873dec68834d48fa128a9c9389886040516111a792919061354c565b60405180910390a45050505b95945050505050565b6060816001600160a01b031663802758606040518163ffffffff1660e01b815260040160006040518083038186803b1580156111f757600080fd5b505afa15801561120b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112339190810190612b08565b80516001600160a01b038416600090815260036020526040812054929350909160ff16905b828110156102dd57600084828151811061126e57fe5b602002602001015160400151131561146e57600084828151811061128e57fe5b60200260200101516000015190506112a581611f09565b1561146c576000819050806001600160a01b031663a10932956040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190612c2d565b1561146a57604051635148955160e01b81526000906001600160a01b03831690635148955190611354908890600401612fc1565b604080518083038186803b15801561136b57600080fd5b505afa15801561137f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a39190612c84565b5090506001600160a01b0381166113d757507f00000000000000000000000000000000000000000000000000000000000000005b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611406908c90600401612f06565b60206040518083038186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114569190612e94565b9050611466898484846000611552565b5050505b505b505b600101611258565b3390565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395fd976585856040518363ffffffff1660e01b81526004016114cb929190613503565b60206040518083038186803b1580156114e357600080fd5b505afa1580156114f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151b9190612a4b565b905061152f816001600160a01b03166116fa565b61154b5760405162461bcd60e51b815260040161030990613378565b9392505050565b600082611561575060006111b3565b600061156d8686611b53565b90506000856001600160a01b03166370a08231896040518263ffffffff1660e01b815260040161159d9190612f06565b60206040518083038186803b1580156115b557600080fd5b505afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190612e94565b90506000876001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040161161d9190612f06565b60206040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190612e94565b905061167b89898886612061565b6116888989838a86611e1a565b945050848410156116ab5760405162461bcd60e51b8152600401610309906132f7565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f895fb257d64fb09afa1c8dacd1f565f147d43c41fbbee34950c64f1e4a7bc57c89886040516111a792919061354c565b3b151590565b606080826001600160a01b031663802758606040518163ffffffff1660e01b815260040160006040518083038186803b15801561173c57600080fd5b505afa158015611750573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117789190810190612b08565b80519091506000805b828110156117e457600084828151811061179757fe5b60200260200101516040015113156117dc5760008482815181106117b757fe5b60200260200101516000015190506117ce81611f09565b156117da576001909201915b505b600101611781565b508067ffffffffffffffff811180156117fc57600080fd5b50604051908082528060200260200182016040528015611826578160200160208202803683370190505b5093506000805b838110156118b557600085828151811061184357fe5b60200260200101516040015113156118ad57600085828151811061186357fe5b602002602001015160000151905061187a81611f09565b156118ab578087848151811061188c57fe5b6001600160a01b03909216602092830291909101909101526001909201915b505b60010161182d565b5050505050919050565b6118c982826119c1565b6118e55760405162461bcd60e51b815260040161030990613495565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611919908490600401612f06565b60206040518083038186803b15801561193157600080fd5b505afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190612c2d565b6119855760405162461bcd60e51b815260040161030990613452565b61198e81612162565b610ef65760405162461bcd60e51b8152600401610309906130b2565b6000806119b683612191565b905061154b8161219c565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0657600080fd5b505afa158015611a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3e9190612a4b565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611a80908590600401612f06565b60206040518083038186803b158015611a9857600080fd5b505afa158015611aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad09190612c2d565b80156108a157506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90611b03903090600401612f06565b60206040518083038186803b158015611b1b57600080fd5b505afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190612c2d565b6000806000611b6185612259565b91509150816001600160a01b0316846001600160a01b031614925082611bb257806001600160a01b0316846001600160a01b031614611bb25760405162461bcd60e51b8152600401610309906132ac565b505092915050565b604051636eb1769f60e11b815281906001600160a01b0384169063dd62ed3e90611bea9088908890600401612f1a565b60206040518083038186803b158015611c0257600080fd5b505afa158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3a9190612e94565b101561086c57606063095ea7b360e01b8483604051602401611c5d929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516347b7819960e11b81529091506001600160a01b03861690638f6f033290611cc29086906000908690600401612f4d565b600060405180830381600087803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b659190810190612c49565b60008082611d2d5763036e120760e21b611d36565b6329cf140560e01b5b905060608186868a8688604051602401611d5495949392919061355a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516347b7819960e11b81529091506001600160a01b03891690638f6f033290611db9908a906000908690600401612f4d565b600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e0f9190810190612c49565b505050505050505050565b6000806000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5857600080fd5b505afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e909190612e94565b90506000611eaf6001600160a01b038a1689848a63ffffffff61237d16565b5090915060009050611ed26001600160a01b038b1688858963ffffffff61237d16565b50909150611ee89050888363ffffffff6124c316565b611ef8828863ffffffff6124c316565b945094505050509550959350505050565b6000611f1d826001600160a01b03166116fa565b611f29575060006108a4565b816001600160a01b03166348d8f98d6040518163ffffffff1660e01b8152600401604080518083038186803b158015611f6157600080fd5b505afa925050508015611f91575060408051601f3d908101601f19168201909252611f8e91810190612eac565b60015b611f9d575060006108a4565b6040516395fd976560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906395fd976590611feb9085908590600401613503565b60206040518083038186803b15801561200357600080fd5b505afa925050508015612033575060408051601f3d908101601f1916820190925261203091810190612a4b565b60015b612042576000925050506108a4565b806001600160a01b0316856001600160a01b03161493505050506108a4565b63ffffffff60008261207a57633d3192cb60e01b612083565b63745d08d960e01b5b905060608185888560405160240161209d93929190613527565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516347b7819960e11b81529091506001600160a01b03881690638f6f0332906121029089906000908690600401612f4d565b600060405180830381600087803b15801561211c57600080fd5b505af1158015612130573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121589190810190612c49565b5050505050505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790611b03903090600401612f06565b805160209091012090565b6000805481906121b4906001600160a01b0316612505565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b81526004016121e1929190612f34565b60206040518083038186803b1580156121f957600080fd5b505afa15801561220d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122319190612a4b565b90506001600160a01b0381166108a15760405162461bcd60e51b8152600401610309906130e9565b600080826001600160a01b031663ee719bc86040518163ffffffff1660e01b8152600401604080518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190612cbd565b5091506001600160a01b038216612301577f000000000000000000000000000000000000000000000000000000000000000091505b826001600160a01b031663f8eef10f6040518163ffffffff1660e01b815260040160606040518083038186803b15801561233a57600080fd5b505afa15801561234e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123729190612cea565b509294909350915050565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016123af9190612f06565b60206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190612e94565b90506000612487896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b81526004016124329190612f06565b60206040518083038186803b15801561244a57600080fd5b505afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190612e94565b612584565b9050600082156124a45761249d888885856125aa565b90506124a8565b5060005b6124b38a8a836125f9565b9199909850909650945050505050565b600061154b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061276d565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced69061253490849060040161351e565b60206040518083038186803b15801561254c57600080fd5b505afa158015612560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190612a4b565b6000808212156125a65760405162461bcd60e51b81526004016103099061313b565b5090565b6000806125cd6125c0848863ffffffff61279916565b869063ffffffff6124c316565b90506125ef866125e3868463ffffffff6124c316565b9063ffffffff6127c316565b9695505050505050565b600061260584846127e1565b9050801580156126155750600082115b1561268c576126248484612868565b612687576040516304e3532760e41b81526001600160a01b03851690634e35327090612654908690600401612f06565b600060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050505b612709565b808015612697575081155b15612709576126a68484612868565b61270957604051636f86c89760e01b81526001600160a01b03851690636f86c897906126d6908690600401612f06565b600060405180830381600087803b1580156126f057600080fd5b505af1158015612704573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784612722856128f4565b6040518363ffffffff1660e01b815260040161273f929190612f34565b600060405180830381600087803b15801561275957600080fd5b505af1158015612158573d6000803e3d6000fd5b600081848411156127915760405162461bcd60e51b81526004016103099190612fcc565b505050900390565b600061154b670de0b6b3a76400006127b7858563ffffffff61291916565b9063ffffffff61295316565b600061154b826127b785670de0b6b3a764000063ffffffff61291916565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b81526004016128109190612f06565b60206040518083038186803b15801561282857600080fd5b505afa15801561283c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128609190612e94565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b81526004016128979190612f06565b60006040518083038186803b1580156128af57600080fd5b505afa1580156128c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128eb9190810190612a67565b51119392505050565b6000600160ff1b82106125a65760405162461bcd60e51b8152600401610309906133c6565b60008261292857506000610feb565b8282028284828161293557fe5b041461154b5760405162461bcd60e51b8152600401610309906131de565b600061154b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836129b15760405162461bcd60e51b81526004016103099190612fcc565b5060008385816129bd57fe5b0495945050505050565b600082601f8301126129d7578081fd5b815167ffffffffffffffff8111156129ed578182fd5b612a00601f8201601f191660200161359b565b9150808252836020828501011115612a1757600080fd5b612a288160208401602086016135e2565b5092915050565b600060208284031215612a40578081fd5b813561154b8161360e565b600060208284031215612a5c578081fd5b815161154b8161360e565b60006020808385031215612a79578182fd5b825167ffffffffffffffff811115612a8f578283fd5b80840185601f820112612aa0578384fd5b80519150612ab5612ab0836135c2565b61359b565b8281528381019082850185850284018601891015612ad1578687fd5b8693505b84841015612afc578051612ae88161360e565b835260019390930192918501918501612ad5565b50979650505050505050565b60006020808385031215612b1a578182fd5b825167ffffffffffffffff80821115612b31578384fd5b81850186601f820112612b42578485fd5b80519250612b52612ab0846135c2565b83815284810190828601875b86811015612c02578151850160a080601f19838f03011215612b7e578a8bfd5b612b878161359b565b8a830151612b948161360e565b81526040830151612ba48161360e565b818c01526060838101516040830152608084015160ff81168114612bc6578d8efd5b908201528282015189811115612bda578c8dfd5b612be88f8d838701016129c7565b608083015250865250509287019290870190600101612b5e565b50909998505050505050505050565b600060208284031215612c22578081fd5b813561154b81613623565b600060208284031215612c3e578081fd5b815161154b81613623565b600060208284031215612c5a578081fd5b815167ffffffffffffffff811115612c70578182fd5b612c7c848285016129c7565b949350505050565b60008060408385031215612c96578081fd5b8251612ca18161360e565b6020840151909250612cb281613623565b809150509250929050565b60008060408385031215612ccf578182fd5b8251612cda8161360e565b6020939093015192949293505050565b600080600060608486031215612cfe578081fd5b8351612d098161360e565b60208501516040860151919450925060058110612d24578182fd5b809150509250925092565b60008060408385031215612d41578182fd5b8235612d4c8161360e565b91506020830135612cb281613623565b60008060408385031215612d6e578182fd5b8235612d798161360e565b91506020830135612cb28161360e565b60008060008060008060c08789031215612da1578384fd5b8635612dac8161360e565b95506020870135612dbc81613631565b94506040870135612dcc81613641565b9350606087013592506080870135612de38161360e565b8092505060a087013590509295509295509295565b60008060408385031215612e0a578182fd5b8235612e158161360e565b946020939093013593505050565b60008060008060808587031215612e38578182fd5b8435612e438161360e565b9350602085013592506040850135612e5a8161360e565b91506060850135612e6a81613623565b939692955090935050565b600060208284031215612e86578081fd5b81516003811061154b578182fd5b600060208284031215612ea5578081fd5b5051919050565b60008060408385031215612ebe578182fd5b8251612ec981613631565b6020840151909250612cb281613641565b60008151808452612ef28160208601602086016135e2565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b0385168252836020830152606060408301526111b36060830184612eda565b6020808252825182820181905260009190848201906040850190845b81811015612fb55783516001600160a01b031683529284019291840191600101612f90565b50909695505050505050565b901515815260200190565b60006020825261154b6020830184612eda565b60208082526025908201527f53656e6420746f6b656e206d75737420626520616e20696e64657820636f6d706040820152641bdb995b9d60da1b606082015260800190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b60208082526009908201526813dd995c9cdc195b9d60ba1b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b6020808252602b908201527f546f6b656e206973206e656974686572206173736574206e6f7220756e64657260408201526a363cb4b733903a37b5b2b760a91b606082015260800190565b6020808252601a908201527f4e6f7420656e6f75676820726563656976656420616d6f756e74000000000000604082015260600190565b6020808252602a908201527f464361736820746f2072656465656d206d75737420626520616e20696e6465786040820152690818dbdb5c1bdb995b9d60b21b606082015260800190565b6020808252602e908201527f577261707065646643617368206e6f74206465706c6f79656420666f7220676960408201526d76656e20706172616d657465727360901b606082015260800190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b61ffff92909216825264ffffffffff16602082015260400190565b90815260200190565b9283526001600160a01b0391909116602083015263ffffffff16604082015260600190565b918252602082015260400190565b9485526affffffffffffffffffffff9390931660208501526001600160a01b0391909116604084015263ffffffff1660608301521515608082015260a00190565b60405181810167ffffffffffffffff811182821017156135ba57600080fd5b604052919050565b600067ffffffffffffffff8211156135d8578081fd5b5060209081020190565b60005b838110156135fd5781810151838201526020016135e5565b8381111561086c5750506000910152565b6001600160a01b0381168114610ef657600080fd5b8015158114610ef657600080fd5b61ffff81168114610ef657600080fd5b64ffffffffff81168114610ef657600080fdfea264697066735822122027dbbaf2dd88377ff3ff8f669c9225dbe99c4fb8ae0d7e9b20aad6d279b344e464736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061014d5760003560e01c80639590f11b116100c3578063c4d66de81161007c578063c4d66de814610277578063c690a74c1461028a578063ee78244f1461029d578063f2fde38b146102b0578063f633e0de146102c3578063f77c4791146102cb5761014d565b80639590f11b1461021c57806395c70b3a1461023c578063a2306c891461025c578063b1dd4d921461026f578063c137f4d714610152578063c153dd07146101a55761014d565b80635aeced65116101155780635aeced65146101cb5780635b136512146101de57806363c89f72146101f1578063715018a614610204578063847ef08d1461020c5780638da5cb5b146102145761014d565b80630fb96b2114610152578063214b26e0146101675780633fc8cef3146101905780633fe6106b146101a55780635199e418146101b8575b600080fd5b610165610160366004612e23565b6102d3565b005b61017a610175366004612d89565b6102e4565b604051610187919061351e565b60405180910390f35b6101986103e5565b6040516101879190612f06565b6101656101b3366004612df8565b610409565b6101656101c6366004612c11565b610421565b61017a6101d9366004612d89565b610493565b6101656101ec366004612d5c565b61057b565b6101656101ff366004612d2f565b610680565b6101656106b6565b610165610735565b610198610872565b61022f61022a366004612a2f565b610881565b6040516101879190612fc1565b61024f61024a366004612a2f565b610896565b6040516101879190612f74565b61016561026a366004612a2f565b6108a9565b61022f6108ec565b610165610285366004612a2f565b6108f5565b610165610298366004612d2f565b610b6d565b61022f6102ab366004612a2f565b610cb5565b6101656102be366004612a2f565b610cca565b610198610d81565b610198610da5565b836102dd81610db4565b5050505050565b6000600260015414156103125760405162461bcd60e51b8152600401610309906134cc565b60405180910390fd5b60026001558661032181610ef9565b60405163df5e9b2960e01b81526001600160a01b0389169063df5e9b299061034d908790600401612f06565b60206040518083038186803b15801561036557600080fd5b505afa158015610379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039d9190612c2d565b6103b95760405162461bcd60e51b815260040161030990612fdf565b60006103c58888610f44565b90506103d48982878988610ff1565b600180559998505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b8161041381610db4565b61041c836111bc565b505050565b610429611476565b6002546001600160a01b039081169116146104565760405162461bcd60e51b815260040161030990613249565b6005805460ff19168215159081179091556040517f563e1633136cdd43b8793897cb53ba2a9e31c18b3ae0b6827fbbb03b9902e6c690600090a250565b6000600260015414156104b85760405162461bcd60e51b8152600401610309906134cc565b6002600155866104c781610ef9565b60006104d3888861147a565b60405163df5e9b2960e01b81529091506001600160a01b038a169063df5e9b2990610502908490600401612f06565b60206040518083038186803b15801561051a57600080fd5b505afa15801561052e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105529190612c2d565b61056e5760405162461bcd60e51b81526004016103099061332e565b6103d48982878988611552565b8161058581610ef9565b6040516335fc6c9f60e21b81526001600160a01b0384169063d7f1b27c906105b1908590600401612f06565b60206040518083038186803b1580156105c957600080fd5b505afa1580156105dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106019190612c2d565b61061d5760405162461bcd60e51b8152600401610309906131a7565b6040516306cd8db760e51b81526001600160a01b0383169063d9b1b6e090610649908690600401612f06565b600060405180830381600087803b15801561066357600080fd5b505af1158015610677573d6000803e3d6000fd5b50505050505050565b8161068a81610ef9565b506001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b6106be611476565b6002546001600160a01b039081169116146106eb5760405162461bcd60e51b815260040161030990613249565b6002546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600280546001600160a01b0319169055565b3361073f81610f1f565b33610749816111bc565b6060816001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b15801561078457600080fd5b505afa158015610798573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107c09190810190612a67565b905060005b815181101561086c576107f38282815181106107dd57fe5b60200260200101516001600160a01b03166116fa565b156108645781818151811061080457fe5b60200260200101516001600160a01b031663e0799620846040518263ffffffff1660e01b81526004016108379190612f06565b600060405180830381600087803b15801561085157600080fd5b505af1925050508015610862575060015b505b6001016107c5565b50505050565b6002546001600160a01b031690565b60036020526000908152604090205460ff1681565b60606108a182611700565b90505b919050565b600260015414156108cc5760405162461bcd60e51b8152600401610309906134cc565b6002600155806108db81610f1f565b6108e4826111bc565b505060018055565b60055460ff1681565b803361090182826118bf565b8261090b816118e9565b60055460ff1661094d576001600160a01b03841660009081526004602052604090205460ff1661094d5760405162461bcd60e51b81526004016103099061327e565b836001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b50505050836001600160a01b031663d7f1b27c6109e56040518060400160405280601581526020017444656661756c7449737375616e63654d6f64756c6560581b8152506119aa565b6040518263ffffffff1660e01b8152600401610a019190612f06565b60206040518083038186803b158015610a1957600080fd5b505afa158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190612c2d565b610a6d5760405162461bcd60e51b8152600401610309906131a7565b6060846001600160a01b031663b2494df36040518163ffffffff1660e01b815260040160006040518083038186803b158015610aa857600080fd5b505afa158015610abc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae49190810190612a67565b905060005b8151811015610b6557818181518110610afe57fe5b60200260200101516001600160a01b031663d9b1b6e0876040518263ffffffff1660e01b8152600401610b319190612f06565b600060405180830381600087803b158015610b4b57600080fd5b505af1925050508015610b5c575060015b50600101610ae9565b505050505050565b610b75611476565b6002546001600160a01b03908116911614610ba25760405162461bcd60e51b815260040161030990613249565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90610bd2908590600401612f06565b60206040518083038186803b158015610bea57600080fd5b505afa158015610bfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c229190612c2d565b80610c4557506001600160a01b03821660009081526004602052604090205460ff165b610c615760405162461bcd60e51b81526004016103099061321f565b6001600160a01b038216600081815260046020526040808220805460ff191685151590811790915590519092917f2035981b48691b10f6ac65174e570b4d0a8a889ae01bef3e5e7759ff9444f0c491a35050565b60046020526000908152604090205460ff1681565b610cd2611476565b6002546001600160a01b03908116911614610cff5760405162461bcd60e51b815260040161030990613249565b6001600160a01b038116610d255760405162461bcd60e51b81526004016103099061306c565b6002546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031681565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290610de2903390600401612f06565b60206040518083038186803b158015610dfa57600080fd5b505afa158015610e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e329190612e75565b6002811115610e3d57fe5b14610e5a5760405162461bcd60e51b815260040161030990613170565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990610e8a903390600401612f06565b60206040518083038186803b158015610ea257600080fd5b505afa158015610eb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eda9190612c2d565b610ef65760405162461bcd60e51b81526004016103099061340e565b50565b610f0381336119c1565b610f1f5760405162461bcd60e51b815260040161030990613495565b610f2881611a4f565b610ef65760405162461bcd60e51b815260040161030990613024565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663422a73a485856040518363ffffffff1660e01b8152600401610f95929190613503565b602060405180830381600087803b158015610faf57600080fd5b505af1158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190612a4b565b9150505b92915050565b600082611000575060006111b3565b600061100c8686611b53565b905061101a87878786611bba565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190611049908b90600401612f06565b60206040518083038186803b15801561106157600080fd5b505afa158015611075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110999190612e94565b90506000876001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016110c99190612f06565b60206040518083038186803b1580156110e157600080fd5b505afa1580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111199190612e94565b90506111288989878987611d18565b6111358988848b85611e1a565b509350848411156111585760405162461bcd60e51b815260040161030990613118565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167fe8156c079033d9ccf08a8bdc671fda8663f61b29873dec68834d48fa128a9c9389886040516111a792919061354c565b60405180910390a45050505b95945050505050565b6060816001600160a01b031663802758606040518163ffffffff1660e01b815260040160006040518083038186803b1580156111f757600080fd5b505afa15801561120b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112339190810190612b08565b80516001600160a01b038416600090815260036020526040812054929350909160ff16905b828110156102dd57600084828151811061126e57fe5b602002602001015160400151131561146e57600084828151811061128e57fe5b60200260200101516000015190506112a581611f09565b1561146c576000819050806001600160a01b031663a10932956040518163ffffffff1660e01b815260040160206040518083038186803b1580156112e857600080fd5b505afa1580156112fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113209190612c2d565b1561146a57604051635148955160e01b81526000906001600160a01b03831690635148955190611354908890600401612fc1565b604080518083038186803b15801561136b57600080fd5b505afa15801561137f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a39190612c84565b5090506001600160a01b0381166113d757507f00000000000000000000000000000000000000000000000000000000000000005b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190611406908c90600401612f06565b60206040518083038186803b15801561141e57600080fd5b505afa158015611432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114569190612e94565b9050611466898484846000611552565b5050505b505b505b600101611258565b3390565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166395fd976585856040518363ffffffff1660e01b81526004016114cb929190613503565b60206040518083038186803b1580156114e357600080fd5b505afa1580156114f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151b9190612a4b565b905061152f816001600160a01b03166116fa565b61154b5760405162461bcd60e51b815260040161030990613378565b9392505050565b600082611561575060006111b3565b600061156d8686611b53565b90506000856001600160a01b03166370a08231896040518263ffffffff1660e01b815260040161159d9190612f06565b60206040518083038186803b1580156115b557600080fd5b505afa1580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190612e94565b90506000876001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040161161d9190612f06565b60206040518083038186803b15801561163557600080fd5b505afa158015611649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166d9190612e94565b905061167b89898886612061565b6116888989838a86611e1a565b945050848410156116ab5760405162461bcd60e51b8152600401610309906132f7565b866001600160a01b0316886001600160a01b03168a6001600160a01b03167f895fb257d64fb09afa1c8dacd1f565f147d43c41fbbee34950c64f1e4a7bc57c89886040516111a792919061354c565b3b151590565b606080826001600160a01b031663802758606040518163ffffffff1660e01b815260040160006040518083038186803b15801561173c57600080fd5b505afa158015611750573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117789190810190612b08565b80519091506000805b828110156117e457600084828151811061179757fe5b60200260200101516040015113156117dc5760008482815181106117b757fe5b60200260200101516000015190506117ce81611f09565b156117da576001909201915b505b600101611781565b508067ffffffffffffffff811180156117fc57600080fd5b50604051908082528060200260200182016040528015611826578160200160208202803683370190505b5093506000805b838110156118b557600085828151811061184357fe5b60200260200101516040015113156118ad57600085828151811061186357fe5b602002602001015160000151905061187a81611f09565b156118ab578087848151811061188c57fe5b6001600160a01b03909216602092830291909101909101526001909201915b505b60010161182d565b5050505050919050565b6118c982826119c1565b6118e55760405162461bcd60e51b815260040161030990613495565b5050565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611919908490600401612f06565b60206040518083038186803b15801561193157600080fd5b505afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190612c2d565b6119855760405162461bcd60e51b815260040161030990613452565b61198e81612162565b610ef65760405162461bcd60e51b8152600401610309906130b2565b6000806119b683612191565b905061154b8161219c565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b158015611a0657600080fd5b505afa158015611a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3e9190612a4b565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611a80908590600401612f06565b60206040518083038186803b158015611a9857600080fd5b505afa158015611aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad09190612c2d565b80156108a157506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c90611b03903090600401612f06565b60206040518083038186803b158015611b1b57600080fd5b505afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190612c2d565b6000806000611b6185612259565b91509150816001600160a01b0316846001600160a01b031614925082611bb257806001600160a01b0316846001600160a01b031614611bb25760405162461bcd60e51b8152600401610309906132ac565b505092915050565b604051636eb1769f60e11b815281906001600160a01b0384169063dd62ed3e90611bea9088908890600401612f1a565b60206040518083038186803b158015611c0257600080fd5b505afa158015611c16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3a9190612e94565b101561086c57606063095ea7b360e01b8483604051602401611c5d929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516347b7819960e11b81529091506001600160a01b03861690638f6f033290611cc29086906000908690600401612f4d565b600060405180830381600087803b158015611cdc57600080fd5b505af1158015611cf0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b659190810190612c49565b60008082611d2d5763036e120760e21b611d36565b6329cf140560e01b5b905060608186868a8688604051602401611d5495949392919061355a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516347b7819960e11b81529091506001600160a01b03891690638f6f033290611db9908a906000908690600401612f4d565b600060405180830381600087803b158015611dd357600080fd5b505af1158015611de7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611e0f9190810190612c49565b505050505050505050565b6000806000876001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5857600080fd5b505afa158015611e6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e909190612e94565b90506000611eaf6001600160a01b038a1689848a63ffffffff61237d16565b5090915060009050611ed26001600160a01b038b1688858963ffffffff61237d16565b50909150611ee89050888363ffffffff6124c316565b611ef8828863ffffffff6124c316565b945094505050509550959350505050565b6000611f1d826001600160a01b03166116fa565b611f29575060006108a4565b816001600160a01b03166348d8f98d6040518163ffffffff1660e01b8152600401604080518083038186803b158015611f6157600080fd5b505afa925050508015611f91575060408051601f3d908101601f19168201909252611f8e91810190612eac565b60015b611f9d575060006108a4565b6040516395fd976560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906395fd976590611feb9085908590600401613503565b60206040518083038186803b15801561200357600080fd5b505afa925050508015612033575060408051601f3d908101601f1916820190925261203091810190612a4b565b60015b612042576000925050506108a4565b806001600160a01b0316856001600160a01b03161493505050506108a4565b63ffffffff60008261207a57633d3192cb60e01b612083565b63745d08d960e01b5b905060608185888560405160240161209d93929190613527565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516347b7819960e11b81529091506001600160a01b03881690638f6f0332906121029089906000908690600401612f4d565b600060405180830381600087803b15801561211c57600080fd5b505af1158015612130573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121589190810190612c49565b5050505050505050565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f790611b03903090600401612f06565b805160209091012090565b6000805481906121b4906001600160a01b0316612505565b6001600160a01b031663e6d642c530856040518363ffffffff1660e01b81526004016121e1929190612f34565b60206040518083038186803b1580156121f957600080fd5b505afa15801561220d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122319190612a4b565b90506001600160a01b0381166108a15760405162461bcd60e51b8152600401610309906130e9565b600080826001600160a01b031663ee719bc86040518163ffffffff1660e01b8152600401604080518083038186803b15801561229457600080fd5b505afa1580156122a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122cc9190612cbd565b5091506001600160a01b038216612301577f000000000000000000000000000000000000000000000000000000000000000091505b826001600160a01b031663f8eef10f6040518163ffffffff1660e01b815260040160606040518083038186803b15801561233a57600080fd5b505afa15801561234e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123729190612cea565b509294909350915050565b600080600080866001600160a01b03166370a08231896040518263ffffffff1660e01b81526004016123af9190612f06565b60206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190612e94565b90506000612487896001600160a01b03166366cb8d2f8a6040518263ffffffff1660e01b81526004016124329190612f06565b60206040518083038186803b15801561244a57600080fd5b505afa15801561245e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124829190612e94565b612584565b9050600082156124a45761249d888885856125aa565b90506124a8565b5060005b6124b38a8a836125f9565b9199909850909650945050505050565b600061154b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061276d565b6040516373b2e76b60e11b81526000906001600160a01b0383169063e765ced69061253490849060040161351e565b60206040518083038186803b15801561254c57600080fd5b505afa158015612560573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190612a4b565b6000808212156125a65760405162461bcd60e51b81526004016103099061313b565b5090565b6000806125cd6125c0848863ffffffff61279916565b869063ffffffff6124c316565b90506125ef866125e3868463ffffffff6124c316565b9063ffffffff6127c316565b9695505050505050565b600061260584846127e1565b9050801580156126155750600082115b1561268c576126248484612868565b612687576040516304e3532760e41b81526001600160a01b03851690634e35327090612654908690600401612f06565b600060405180830381600087803b15801561266e57600080fd5b505af1158015612682573d6000803e3d6000fd5b505050505b612709565b808015612697575081155b15612709576126a68484612868565b61270957604051636f86c89760e01b81526001600160a01b03851690636f86c897906126d6908690600401612f06565b600060405180830381600087803b1580156126f057600080fd5b505af1158015612704573d6000803e3d6000fd5b505050505b836001600160a01b0316632ba57d1784612722856128f4565b6040518363ffffffff1660e01b815260040161273f929190612f34565b600060405180830381600087803b15801561275957600080fd5b505af1158015612158573d6000803e3d6000fd5b600081848411156127915760405162461bcd60e51b81526004016103099190612fcc565b505050900390565b600061154b670de0b6b3a76400006127b7858563ffffffff61291916565b9063ffffffff61295316565b600061154b826127b785670de0b6b3a764000063ffffffff61291916565b600080836001600160a01b03166366cb8d2f846040518263ffffffff1660e01b81526004016128109190612f06565b60206040518083038186803b15801561282857600080fd5b505afa15801561283c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128609190612e94565b139392505050565b600080836001600160a01b031663a7bdad03846040518263ffffffff1660e01b81526004016128979190612f06565b60006040518083038186803b1580156128af57600080fd5b505afa1580156128c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128eb9190810190612a67565b51119392505050565b6000600160ff1b82106125a65760405162461bcd60e51b8152600401610309906133c6565b60008261292857506000610feb565b8282028284828161293557fe5b041461154b5760405162461bcd60e51b8152600401610309906131de565b600061154b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250600081836129b15760405162461bcd60e51b81526004016103099190612fcc565b5060008385816129bd57fe5b0495945050505050565b600082601f8301126129d7578081fd5b815167ffffffffffffffff8111156129ed578182fd5b612a00601f8201601f191660200161359b565b9150808252836020828501011115612a1757600080fd5b612a288160208401602086016135e2565b5092915050565b600060208284031215612a40578081fd5b813561154b8161360e565b600060208284031215612a5c578081fd5b815161154b8161360e565b60006020808385031215612a79578182fd5b825167ffffffffffffffff811115612a8f578283fd5b80840185601f820112612aa0578384fd5b80519150612ab5612ab0836135c2565b61359b565b8281528381019082850185850284018601891015612ad1578687fd5b8693505b84841015612afc578051612ae88161360e565b835260019390930192918501918501612ad5565b50979650505050505050565b60006020808385031215612b1a578182fd5b825167ffffffffffffffff80821115612b31578384fd5b81850186601f820112612b42578485fd5b80519250612b52612ab0846135c2565b83815284810190828601875b86811015612c02578151850160a080601f19838f03011215612b7e578a8bfd5b612b878161359b565b8a830151612b948161360e565b81526040830151612ba48161360e565b818c01526060838101516040830152608084015160ff81168114612bc6578d8efd5b908201528282015189811115612bda578c8dfd5b612be88f8d838701016129c7565b608083015250865250509287019290870190600101612b5e565b50909998505050505050505050565b600060208284031215612c22578081fd5b813561154b81613623565b600060208284031215612c3e578081fd5b815161154b81613623565b600060208284031215612c5a578081fd5b815167ffffffffffffffff811115612c70578182fd5b612c7c848285016129c7565b949350505050565b60008060408385031215612c96578081fd5b8251612ca18161360e565b6020840151909250612cb281613623565b809150509250929050565b60008060408385031215612ccf578182fd5b8251612cda8161360e565b6020939093015192949293505050565b600080600060608486031215612cfe578081fd5b8351612d098161360e565b60208501516040860151919450925060058110612d24578182fd5b809150509250925092565b60008060408385031215612d41578182fd5b8235612d4c8161360e565b91506020830135612cb281613623565b60008060408385031215612d6e578182fd5b8235612d798161360e565b91506020830135612cb28161360e565b60008060008060008060c08789031215612da1578384fd5b8635612dac8161360e565b95506020870135612dbc81613631565b94506040870135612dcc81613641565b9350606087013592506080870135612de38161360e565b8092505060a087013590509295509295509295565b60008060408385031215612e0a578182fd5b8235612e158161360e565b946020939093013593505050565b60008060008060808587031215612e38578182fd5b8435612e438161360e565b9350602085013592506040850135612e5a8161360e565b91506060850135612e6a81613623565b939692955090935050565b600060208284031215612e86578081fd5b81516003811061154b578182fd5b600060208284031215612ea5578081fd5b5051919050565b60008060408385031215612ebe578182fd5b8251612ec981613631565b6020840151909250612cb281613641565b60008151808452612ef28160208601602086016135e2565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b600060018060a01b0385168252836020830152606060408301526111b36060830184612eda565b6020808252825182820181905260009190848201906040850190845b81811015612fb55783516001600160a01b031683529284019291840191600101612f90565b50909695505050505050565b901515815260200190565b60006020825261154b6020830184612eda565b60208082526025908201527f53656e6420746f6b656e206d75737420626520616e20696e64657820636f6d706040820152641bdb995b9d60da1b606082015260800190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b60208082526015908201527426bab9ba103132903b30b634b21030b230b83a32b960591b604082015260600190565b60208082526009908201526813dd995c9cdc195b9d60ba1b604082015260600190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526018908201527f49737375616e6365206e6f7420696e697469616c697a65640000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526010908201526f24b73b30b634b21029b2ba2a37b5b2b760811b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152732737ba1030b63637bbb2b21029b2ba2a37b5b2b760611b604082015260600190565b6020808252602b908201527f546f6b656e206973206e656974686572206173736574206e6f7220756e64657260408201526a363cb4b733903a37b5b2b760a91b606082015260800190565b6020808252601a908201527f4e6f7420656e6f75676820726563656976656420616d6f756e74000000000000604082015260600190565b6020808252602a908201527f464361736820746f2072656465656d206d75737420626520616e20696e6465786040820152690818dbdb5c1bdb995b9d60b21b606082015260800190565b6020808252602e908201527f577261707065646643617368206e6f74206465706c6f79656420666f7220676960408201526d76656e20706172616d657465727360901b606082015260800190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b61ffff92909216825264ffffffffff16602082015260400190565b90815260200190565b9283526001600160a01b0391909116602083015263ffffffff16604082015260600190565b918252602082015260400190565b9485526affffffffffffffffffffff9390931660208501526001600160a01b0391909116604084015263ffffffff1660608301521515608082015260a00190565b60405181810167ffffffffffffffff811182821017156135ba57600080fd5b604052919050565b600067ffffffffffffffff8211156135d8578081fd5b5060209081020190565b60005b838110156135fd5781810151838201526020016135e5565b8381111561086c5750506000910152565b6001600160a01b0381168114610ef657600080fd5b8015158114610ef657600080fd5b61ffff81168114610ef657600080fd5b64ffffffffff81168114610ef657600080fdfea264697066735822122027dbbaf2dd88377ff3ff8f669c9225dbe99c4fb8ae0d7e9b20aad6d279b344e464736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
