{
    "_format": "hh-sol-artifact-1",
    "contractName": "PlanManager",
    "sourceName": "contracts/PlanManager.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "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": false,
                    "internalType": "string",
                    "name": "name",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "value",
                    "type": "bytes"
                }
            ],
            "name": "Parameter",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "planId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "creator",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "deploymentId",
                    "type": "bytes32"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "planTemplateId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "price",
                    "type": "uint256"
                }
            ],
            "name": "PlanCreated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "planId",
                    "type": "uint256"
                }
            ],
            "name": "PlanRemoved",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                }
            ],
            "name": "PlanTemplateCreated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bytes32",
                    "name": "metadata",
                    "type": "bytes32"
                }
            ],
            "name": "PlanTemplateMetadataChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "active",
                    "type": "bool"
                }
            ],
            "name": "PlanTemplateStatusChanged",
            "type": "event"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "planId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes32",
                    "name": "deploymentId",
                    "type": "bytes32"
                }
            ],
            "name": "acceptPlan",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "price",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes32",
                    "name": "deploymentId",
                    "type": "bytes32"
                }
            ],
            "name": "createPlan",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "period",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "dailyReqCap",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "rateLimit",
                    "type": "uint256"
                },
                {
                    "internalType": "address",
                    "name": "priceToken",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "metadata",
                    "type": "bytes32"
                }
            ],
            "name": "createPlanTemplate",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "runner",
                    "type": "address"
                },
                {
                    "internalType": "bytes32",
                    "name": "deploymentId",
                    "type": "bytes32"
                }
            ],
            "name": "getLimits",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "planId",
                    "type": "uint256"
                }
            ],
            "name": "getPlan",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "address",
                            "name": "indexer",
                            "type": "address"
                        },
                        {
                            "internalType": "uint256",
                            "name": "price",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "templateId",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "deploymentId",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bool",
                            "name": "active",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct Plan",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                }
            ],
            "name": "getPlanTemplate",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "uint256",
                            "name": "period",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "dailyReqCap",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "rateLimit",
                            "type": "uint256"
                        },
                        {
                            "internalType": "address",
                            "name": "priceToken",
                            "type": "address"
                        },
                        {
                            "internalType": "bytes32",
                            "name": "metadata",
                            "type": "bytes32"
                        },
                        {
                            "internalType": "bool",
                            "name": "active",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct PlanTemplateV2",
                    "name": "",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract ISettings",
                    "name": "_settings",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "limit",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nextPlanId",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "nextTemplateId",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "owner",
            "outputs": [
                {
                    "internalType": "address",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "planId",
                    "type": "uint256"
                }
            ],
            "name": "removePlan",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "renounceOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "_limit",
                    "type": "uint256"
                }
            ],
            "name": "setPlanLimit",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "contract ISettings",
                    "name": "_settings",
                    "type": "address"
                }
            ],
            "name": "setSettings",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "settings",
            "outputs": [
                {
                    "internalType": "contract ISettings",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newOwner",
                    "type": "address"
                }
            ],
            "name": "transferOwnership",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                },
                {
                    "internalType": "bytes32",
                    "name": "metadata",
                    "type": "bytes32"
                }
            ],
            "name": "updatePlanTemplateMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "uint256",
                    "name": "templateId",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "active",
                    "type": "bool"
                }
            ],
            "name": "updatePlanTemplateStatus",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        }
    ],
    "bytecode": "0x608060405234801561001057600080fd5b5061199a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638da5cb5b116100ad578063d12edcce11610071578063d12edcce1461037c578063d7aaf44e14610385578063e06174e414610398578063e9b87cd9146103ab578063f2fde38b146103be57600080fd5b80638da5cb5b14610315578063a01d3c2c1461033a578063a4d66daf1461034d578063af31d9b014610356578063c4d66de81461036957600080fd5b80635f8d26b2116100f45780635f8d26b2146102795780637043119414610282578063715018a61461029557806371a9e2631461029d578063771ebc56146102b057600080fd5b806326cd527414610126578063272f2a7a1461020d57806328e550e6146102515780633986418f14610266575b600080fd5b6101bc61013436600461165d565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260696020908152604091829020825160a08101845281546001600160a01b031681526001820154928101929092526002810154928201929092526003820154606082015260049091015460ff161515608082015290565b604051610204919081516001600160a01b0316815260208083015190820152604080830151908201526060808301519082015260809182015115159181019190915260a00190565b60405180910390f35b61024361021b36600461168b565b6001600160a01b03919091166000908152606a60209081526040808320938352929052205490565b604051908152602001610204565b61026461025f36600461165d565b6103d1565b005b6102646102743660046116b7565b6105be565b61024360685481565b61026461029036600461165d565b61088b565b6102646108eb565b6102646102ab3660046116e3565b6108ff565b6102c36102be36600461165d565b6109a2565b60405161020491908151815260208083015190820152604080830151908201526060808301516001600160a01b0316908201526080808301519082015260a09182015115159181019190915260c00190565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610204565b610264610348366004611705565b610a3b565b61024360665481565b610264610364366004611737565b610a65565b610264610377366004611705565b610ad2565b61024360675481565b610264610393366004611767565b610c5c565b606554610322906001600160a01b031681565b6102646103b93660046116e3565b610de8565b6102646103cc366004611705565b6114de565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e5699190610402906005906004016117b0565b602060405180830381865afa15801561041f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044391906117d8565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a691906117f5565b156104cc5760405162461bcd60e51b81526004016104c390611812565b60405180910390fd5b6000818152606960205260409020546001600160a01b0316331461051a5760405162461bcd60e51b81526020600482015260056024820152640a09a6060760db1b60448201526064016104c3565b600081815260696020908152604080832060030154338452606a8352818420818552909252822080549192600192610553908490611846565b909155505060008281526069602052604080822080546001600160a01b0319168155600181018390556002810183905560038101839055600401805460ff191690555183917e4c797e6739331fc6d5c1ebdf112d63e6a68297fdfd28f35f54561e28fd868d91a25050565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e56991906105ef906005906004016117b0565b602060405180830381865afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063091906117d8565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069391906117f5565b156106b05760405162461bcd60e51b81526004016104c390611812565b600083116106e85760405162461bcd60e51b8152602060048201526005602482015264504d30303560d81b60448201526064016104c3565b6106f1826109a2565b60a001516107295760405162461bcd60e51b8152602060048201526005602482015264282698181b60d91b60448201526064016104c3565b606654336000908152606a602090815260408083208584529091529020541061077c5760405162461bcd60e51b8152602060048201526005602482015264504d30303760d81b60448201526064016104c3565b6040805160a08101825233808252602080830187815283850187815260608501878152600160808701818152606854600090815260698752898120985189546001600160a01b0319166001600160a01b03909116178955945188830155925160028801559051600387015590516004909501805460ff191695151595909517909455918252606a8152838220858352905291822080549192909161082190849061185d565b90915550506068546040805133815260208101849052908101849052606081018590527f506977bf21cb741612a724000c21e7d29bdd0d8dee920457f5de0398e07a9f6e9060800160405180910390a26068805490600061088183611875565b9190505550505050565b610893611557565b606681905560408051602081018390527f63c3003ba148ae22ef0cecea7dab164660fafd04037d699677e4478e17ef7b1b910160408051601f19818403018152908290526108e09161188e565b60405180910390a150565b6108f3611557565b6108fd60006115b1565b565b610907611557565b6000828152606b602052604090205415610934576000828152606b60205260409020600401819055610964565b60405162461bcd60e51b815260206004820152600560248201526414134c0c0d60da1b60448201526064016104c3565b817f048b5c5804ae54ee57319d92a5b97cb415e564ea8d6125187c51f6d1476003f48260405161099691815260200190565b60405180910390a25050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506000908152606b6020908152604091829020825160c0810184528154815260018201549281019290925260028101549282019290925260038201546001600160a01b031660608201526004820154608082015260059091015460ff16151560a082015290565b610a43611557565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b610a6d611557565b6000828152606b602052604090205415610934576000828152606b60205260409020600501805460ff1916821515179055817f6278f09839d69e7091c5930d4e8ded33276747b835feaeca81d0880ab6eb491082604051610996911515815260200190565b600054610100900460ff1615808015610af25750600054600160ff909116105b80610b0c5750303b158015610b0c575060005460ff166001145b610b6f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c3565b6000805460ff191660011790558015610b92576000805461ff0019166101001790555b610b9a611603565b606580546001600160a01b0319166001600160a01b0384161790556005606681905560016068556040805160208101929092527f63c3003ba148ae22ef0cecea7dab164660fafd04037d699677e4478e17ef7b1b910160408051601f1981840301815290829052610c0a9161188e565b60405180910390a18015610c58576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610c64611557565b60008511610c9c5760405162461bcd60e51b8152602060048201526005602482015264504d30303160d81b60448201526064016104c3565b60008411610cd45760405162461bcd60e51b8152602060048201526005602482015264282698181960d91b60448201526064016104c3565b60008311610d0c5760405162461bcd60e51b8152602060048201526005602482015264504d30303360d81b60448201526064016104c3565b6040805160c08101825286815260208082018781528284018781526001600160a01b038781166060860190815260808601888152600160a08801818152606780546000908152606b9099528a892099518a559651918901919091559351600288015590516003870180546001600160a01b0319169190931617909155516004850155516005909301805460ff191693151593909317909255905491517fb44f2aaf744711ccf7df65adea7b18bee26176f01c756baf9474cc0a1f9b8d269190a260678054906000610ddc83611875565b91905055505050505050565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e5699190610e19906005906004016117b0565b602060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a91906117d8565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd91906117f5565b15610eda5760405162461bcd60e51b81526004016104c390611812565b600082815260696020908152604091829020825160a08101845281546001600160a01b031681526001820154928101929092526002810154928201929092526003820154606082015260049091015460ff16151560808201819052610f695760405162461bcd60e51b8152602060048201526005602482015264504d30303960d81b60448201526064016104c3565b606081015115610fb35781816060015114610fae5760405162461bcd60e51b81526020600482015260056024820152640504d3031360dc1b60448201526064016104c3565b611042565b81610fe85760405162461bcd60e51b8152602060048201526005602482015264504d30313160d81b60448201526064016104c3565b80516001600160a01b03166000908152606a60209081526040808320858452909152902054156110425760405162461bcd60e51b8152602060048201526005602482015264282698189960d91b60448201526064016104c3565b600061105182604001516109a2565b90508060a0015161108c5760405162461bcd60e51b8152602060048201526005602482015264282698181b60d91b60448201526064016104c3565b60655460405163f4e5699160e01b81526000916001600160a01b03169063f4e56991906110be906011906004016117b0565b602060405180830381865afa1580156110db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ff91906117d8565b606083015160655460405163f4e5699160e01b81526001600160a01b0393841693634bb846e19392169063f4e569919061113e906000906004016117b0565b602060405180830381865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f91906117d8565b60208701516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa1580156111d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fa9190611900565b604080516101008101825233815285516001600160a01b03908116602083015281830188905260608201849052426080830152855160a083015260c082018990528683015160e0830152606554925163f4e5699160e01b8152939450909291169063f4e5699190611270906000906004016117b0565b602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b191906117d8565b60655460405163f4e5699160e01b81526001600160a01b03928316926323b872dd92339291169063f4e56991906112ed906007906004016117b0565b602060405180830381865afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e91906117d8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a691906117f5565b5060655460405163f4e5699160e01b81526000916001600160a01b03169063f4e56991906113d9906007906004016117b0565b602060405180830381865afa1580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906117d8565b60408051637217158f60e01b815284516001600160a01b039081166004830152602086015181166024830152918501516044820152606085015160648201526080850151608482015260a085015160a482015260c085015160c482015260e085015160e4820152919250821690637217158f90610104016020604051808303816000875af11580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190611900565b5050505050505050565b6114e6611557565b6001600160a01b03811661154b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c3565b611554816115b1565b50565b6033546001600160a01b031633146108fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c3565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661162a5760405162461bcd60e51b81526004016104c390611919565b6108fd600054610100900460ff166116545760405162461bcd60e51b81526004016104c390611919565b6108fd336115b1565b60006020828403121561166f57600080fd5b5035919050565b6001600160a01b038116811461155457600080fd5b6000806040838503121561169e57600080fd5b82356116a981611676565b946020939093013593505050565b6000806000606084860312156116cc57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156116f657600080fd5b50508035926020909101359150565b60006020828403121561171757600080fd5b813561172281611676565b9392505050565b801515811461155457600080fd5b6000806040838503121561174a57600080fd5b82359150602083013561175c81611729565b809150509250929050565b600080600080600060a0868803121561177f57600080fd5b853594506020860135935060408601359250606086013561179f81611676565b949793965091946080013592915050565b60208101601583106117d257634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156117ea57600080fd5b815161172281611676565b60006020828403121561180757600080fd5b815161172281611729565b6020808252600490820152634730313960e01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561185857611858611830565b500390565b6000821982111561187057611870611830565b500190565b60006001820161188757611887611830565b5060010190565b6040815260056040820152641b1a5b5a5d60da1b606082015260006020608081840152835180608085015260005b818110156118d85785810183015185820160a0015282016118bc565b818111156118ea57600060a083870101525b50601f01601f19169290920160a0019392505050565b60006020828403121561191257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122018e345ded1397528733418cc53166f01ec928242ddecc53b9566f2fe0c6e8eb764736f6c634300080f0033",
    "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c80638da5cb5b116100ad578063d12edcce11610071578063d12edcce1461037c578063d7aaf44e14610385578063e06174e414610398578063e9b87cd9146103ab578063f2fde38b146103be57600080fd5b80638da5cb5b14610315578063a01d3c2c1461033a578063a4d66daf1461034d578063af31d9b014610356578063c4d66de81461036957600080fd5b80635f8d26b2116100f45780635f8d26b2146102795780637043119414610282578063715018a61461029557806371a9e2631461029d578063771ebc56146102b057600080fd5b806326cd527414610126578063272f2a7a1461020d57806328e550e6146102515780633986418f14610266575b600080fd5b6101bc61013436600461165d565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915250600090815260696020908152604091829020825160a08101845281546001600160a01b031681526001820154928101929092526002810154928201929092526003820154606082015260049091015460ff161515608082015290565b604051610204919081516001600160a01b0316815260208083015190820152604080830151908201526060808301519082015260809182015115159181019190915260a00190565b60405180910390f35b61024361021b36600461168b565b6001600160a01b03919091166000908152606a60209081526040808320938352929052205490565b604051908152602001610204565b61026461025f36600461165d565b6103d1565b005b6102646102743660046116b7565b6105be565b61024360685481565b61026461029036600461165d565b61088b565b6102646108eb565b6102646102ab3660046116e3565b6108ff565b6102c36102be36600461165d565b6109a2565b60405161020491908151815260208083015190820152604080830151908201526060808301516001600160a01b0316908201526080808301519082015260a09182015115159181019190915260c00190565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610204565b610264610348366004611705565b610a3b565b61024360665481565b610264610364366004611737565b610a65565b610264610377366004611705565b610ad2565b61024360675481565b610264610393366004611767565b610c5c565b606554610322906001600160a01b031681565b6102646103b93660046116e3565b610de8565b6102646103cc366004611705565b6114de565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e5699190610402906005906004016117b0565b602060405180830381865afa15801561041f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044391906117d8565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a691906117f5565b156104cc5760405162461bcd60e51b81526004016104c390611812565b60405180910390fd5b6000818152606960205260409020546001600160a01b0316331461051a5760405162461bcd60e51b81526020600482015260056024820152640a09a6060760db1b60448201526064016104c3565b600081815260696020908152604080832060030154338452606a8352818420818552909252822080549192600192610553908490611846565b909155505060008281526069602052604080822080546001600160a01b0319168155600181018390556002810183905560038101839055600401805460ff191690555183917e4c797e6739331fc6d5c1ebdf112d63e6a68297fdfd28f35f54561e28fd868d91a25050565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e56991906105ef906005906004016117b0565b602060405180830381865afa15801561060c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063091906117d8565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af115801561066f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069391906117f5565b156106b05760405162461bcd60e51b81526004016104c390611812565b600083116106e85760405162461bcd60e51b8152602060048201526005602482015264504d30303560d81b60448201526064016104c3565b6106f1826109a2565b60a001516107295760405162461bcd60e51b8152602060048201526005602482015264282698181b60d91b60448201526064016104c3565b606654336000908152606a602090815260408083208584529091529020541061077c5760405162461bcd60e51b8152602060048201526005602482015264504d30303760d81b60448201526064016104c3565b6040805160a08101825233808252602080830187815283850187815260608501878152600160808701818152606854600090815260698752898120985189546001600160a01b0319166001600160a01b03909116178955945188830155925160028801559051600387015590516004909501805460ff191695151595909517909455918252606a8152838220858352905291822080549192909161082190849061185d565b90915550506068546040805133815260208101849052908101849052606081018590527f506977bf21cb741612a724000c21e7d29bdd0d8dee920457f5de0398e07a9f6e9060800160405180910390a26068805490600061088183611875565b9190505550505050565b610893611557565b606681905560408051602081018390527f63c3003ba148ae22ef0cecea7dab164660fafd04037d699677e4478e17ef7b1b910160408051601f19818403018152908290526108e09161188e565b60405180910390a150565b6108f3611557565b6108fd60006115b1565b565b610907611557565b6000828152606b602052604090205415610934576000828152606b60205260409020600401819055610964565b60405162461bcd60e51b815260206004820152600560248201526414134c0c0d60da1b60448201526064016104c3565b817f048b5c5804ae54ee57319d92a5b97cb415e564ea8d6125187c51f6d1476003f48260405161099691815260200190565b60405180910390a25050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506000908152606b6020908152604091829020825160c0810184528154815260018201549281019290925260028101549282019290925260038201546001600160a01b031660608201526004820154608082015260059091015460ff16151560a082015290565b610a43611557565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b610a6d611557565b6000828152606b602052604090205415610934576000828152606b60205260409020600501805460ff1916821515179055817f6278f09839d69e7091c5930d4e8ded33276747b835feaeca81d0880ab6eb491082604051610996911515815260200190565b600054610100900460ff1615808015610af25750600054600160ff909116105b80610b0c5750303b158015610b0c575060005460ff166001145b610b6f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104c3565b6000805460ff191660011790558015610b92576000805461ff0019166101001790555b610b9a611603565b606580546001600160a01b0319166001600160a01b0384161790556005606681905560016068556040805160208101929092527f63c3003ba148ae22ef0cecea7dab164660fafd04037d699677e4478e17ef7b1b910160408051601f1981840301815290829052610c0a9161188e565b60405180910390a18015610c58576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610c64611557565b60008511610c9c5760405162461bcd60e51b8152602060048201526005602482015264504d30303160d81b60448201526064016104c3565b60008411610cd45760405162461bcd60e51b8152602060048201526005602482015264282698181960d91b60448201526064016104c3565b60008311610d0c5760405162461bcd60e51b8152602060048201526005602482015264504d30303360d81b60448201526064016104c3565b6040805160c08101825286815260208082018781528284018781526001600160a01b038781166060860190815260808601888152600160a08801818152606780546000908152606b9099528a892099518a559651918901919091559351600288015590516003870180546001600160a01b0319169190931617909155516004850155516005909301805460ff191693151593909317909255905491517fb44f2aaf744711ccf7df65adea7b18bee26176f01c756baf9474cc0a1f9b8d269190a260678054906000610ddc83611875565b91905055505050505050565b60655460405163f4e5699160e01b81526001600160a01b039091169063f4e5699190610e19906005906004016117b0565b602060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a91906117d8565b6001600160a01b0316636c376cc56040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebd91906117f5565b15610eda5760405162461bcd60e51b81526004016104c390611812565b600082815260696020908152604091829020825160a08101845281546001600160a01b031681526001820154928101929092526002810154928201929092526003820154606082015260049091015460ff16151560808201819052610f695760405162461bcd60e51b8152602060048201526005602482015264504d30303960d81b60448201526064016104c3565b606081015115610fb35781816060015114610fae5760405162461bcd60e51b81526020600482015260056024820152640504d3031360dc1b60448201526064016104c3565b611042565b81610fe85760405162461bcd60e51b8152602060048201526005602482015264504d30313160d81b60448201526064016104c3565b80516001600160a01b03166000908152606a60209081526040808320858452909152902054156110425760405162461bcd60e51b8152602060048201526005602482015264282698189960d91b60448201526064016104c3565b600061105182604001516109a2565b90508060a0015161108c5760405162461bcd60e51b8152602060048201526005602482015264282698181b60d91b60448201526064016104c3565b60655460405163f4e5699160e01b81526000916001600160a01b03169063f4e56991906110be906011906004016117b0565b602060405180830381865afa1580156110db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ff91906117d8565b606083015160655460405163f4e5699160e01b81526001600160a01b0393841693634bb846e19392169063f4e569919061113e906000906004016117b0565b602060405180830381865afa15801561115b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117f91906117d8565b60208701516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa1580156111d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fa9190611900565b604080516101008101825233815285516001600160a01b03908116602083015281830188905260608201849052426080830152855160a083015260c082018990528683015160e0830152606554925163f4e5699160e01b8152939450909291169063f4e5699190611270906000906004016117b0565b602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b191906117d8565b60655460405163f4e5699160e01b81526001600160a01b03928316926323b872dd92339291169063f4e56991906112ed906007906004016117b0565b602060405180830381865afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e91906117d8565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064016020604051808303816000875af1158015611382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a691906117f5565b5060655460405163f4e5699160e01b81526000916001600160a01b03169063f4e56991906113d9906007906004016117b0565b602060405180830381865afa1580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906117d8565b60408051637217158f60e01b815284516001600160a01b039081166004830152602086015181166024830152918501516044820152606085015160648201526080850151608482015260a085015160a482015260c085015160c482015260e085015160e4820152919250821690637217158f90610104016020604051808303816000875af11580156114b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d49190611900565b5050505050505050565b6114e6611557565b6001600160a01b03811661154b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c3565b611554816115b1565b50565b6033546001600160a01b031633146108fd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c3565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661162a5760405162461bcd60e51b81526004016104c390611919565b6108fd600054610100900460ff166116545760405162461bcd60e51b81526004016104c390611919565b6108fd336115b1565b60006020828403121561166f57600080fd5b5035919050565b6001600160a01b038116811461155457600080fd5b6000806040838503121561169e57600080fd5b82356116a981611676565b946020939093013593505050565b6000806000606084860312156116cc57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156116f657600080fd5b50508035926020909101359150565b60006020828403121561171757600080fd5b813561172281611676565b9392505050565b801515811461155457600080fd5b6000806040838503121561174a57600080fd5b82359150602083013561175c81611729565b809150509250929050565b600080600080600060a0868803121561177f57600080fd5b853594506020860135935060408601359250606086013561179f81611676565b949793965091946080013592915050565b60208101601583106117d257634e487b7160e01b600052602160045260246000fd5b91905290565b6000602082840312156117ea57600080fd5b815161172281611676565b60006020828403121561180757600080fd5b815161172281611729565b6020808252600490820152634730313960e01b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008282101561185857611858611830565b500390565b6000821982111561187057611870611830565b500190565b60006001820161188757611887611830565b5060010190565b6040815260056040820152641b1a5b5a5d60da1b606082015260006020608081840152835180608085015260005b818110156118d85785810183015185820160a0015282016118bc565b818111156118ea57600060a083870101525b50601f01601f19169290920160a0019392505050565b60006020828403121561191257600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122018e345ded1397528733418cc53166f01ec928242ddecc53b9566f2fe0c6e8eb764736f6c634300080f0033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
