{
  "_format": "hh-sol-artifact-1",
  "contractName": "BuyGDCloneFactory",
  "sourceName": "contracts/utils/BuyGDClone.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "_router",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stable",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gd",
          "type": "address"
        },
        {
          "internalType": "contract IStaticOracle",
          "name": "_oracle",
          "type": "address"
        },
        {
          "internalType": "contract IQuoterV2",
          "name": "_quoter",
          "type": "address"
        },
        {
          "internalType": "contract IBroker",
          "name": "_mentoBroker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mentoExchangeProvider",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_mentoExchangeId",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "INVALID_TWAP",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NOT_GD_TOKEN",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RECIPIENT_ZERO",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ZERO_MINAMOUNT",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "note",
          "type": "bytes"
        }
      ],
      "name": "GDSwapToCusd",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CUSD",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOUSD",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERIOD",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "USDC",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "celo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "create",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "minAmount",
          "type": "uint256"
        }
      ],
      "name": "createAndSwap",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "donateOrExecTo",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "callData",
          "type": "bytes"
        }
      ],
      "name": "createDonation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "donateOrExecTo",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "withSwap",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "minAmount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "callData",
          "type": "bytes"
        }
      ],
      "name": "createDonationAndSwap",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "donateImpl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gd",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getBaseFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "impl",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mentoBroker",
      "outputs": [
        {
          "internalType": "contract IBroker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mentoExchangeId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mentoExchangeProvider",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract IStaticOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "predict",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "donateOrExecTo",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "callData",
          "type": "bytes"
        }
      ],
      "name": "predictDonation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "quoter",
      "outputs": [
        {
          "internalType": "contract IQuoterV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "router",
      "outputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stable",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101c06040523480156200001257600080fd5b5060405162008b8038038062008b8083398101604081905262000035916200060c565b87878787878787876040516200004b90620005c5565b6200005e989796959493929190620006c1565b604051809103906000f0801580156200007b573d6000803e3d6000fd5b506001600160a01b03166080816001600160a01b0316815250508787878787878787604051620000ab90620005d3565b620000be989796959493929190620006c1565b604051809103906000f080158015620000db573d6000803e3d6000fd5b506001600160a01b0390811660a090815287821660c05288821660e05286821661010052898216610120528582166101405284821661016052908316610180526101a08290526040805160048082529281019091526000916020820160808036833701905050905073765de816845861e75a25fca122bb6898b8b1282a816000815181106200016e576200016e62000722565b60200260200101906001600160a01b031690816001600160a01b03168152505073ceba9300f2b948710d2653dd7b07f33a8b32118c81600181518110620001b957620001b962000722565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad38160028151811062000204576200020462000722565b60200260200101906001600160a01b031690816001600160a01b03168152505060c051816003815181106200023d576200023d62000722565b6001600160a01b039290921660209283029190910182015260408051600380825260808201909252600092909190820160608036833701905050905073471ece3750da237f93b8e339c536989b8978a43881600081518110620002a457620002a462000722565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad381600181518110620002ef57620002ef62000722565b60200260200101906001600160a01b031690816001600160a01b03168152505060c0518160028151811062000328576200032862000722565b60200260200101906001600160a01b031690816001600160a01b03168152505060005b600283516200035b91906200074e565b8110156200043d57876001600160a01b0316631c49cbb584838151811062000387576200038762000722565b6020026020010151858460016200039f91906200076a565b81518110620003b257620003b262000722565b60200260200101516102586040518463ffffffff1660e01b8152600401620003dd9392919062000780565b6000604051808303816000875af1158015620003fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620004279190810190620007a8565b508062000434816200087a565b9150506200034b565b5060005b600282516200045191906200074e565b8110156200053357876001600160a01b0316631c49cbb58383815181106200047d576200047d62000722565b6020026020010151848460016200049591906200076a565b81518110620004a857620004a862000722565b60200260200101516102586040518463ffffffff1660e01b8152600401620004d39392919062000780565b6000604051808303816000875af1158015620004f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200051d9190810190620007a8565b50806200052a816200087a565b91505062000441565b5060e05160c051604051631c49cbb560e01b81526001600160a01b038a1692631c49cbb5926200056a926102589060040162000780565b6000604051808303816000875af11580156200058a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620005b49190810190620007a8565b505050505050505050505062000896565b6136ee80620013eb83390190565b6140a78062004ad983390190565b6001600160a01b0381168114620005f757600080fd5b50565b80516200060781620005e1565b919050565b600080600080600080600080610100898b0312156200062a57600080fd5b88516200063781620005e1565b60208a01519098506200064a81620005e1565b60408a01519097506200065d81620005e1565b60608a01519096506200067081620005e1565b60808a01519095506200068381620005e1565b60a08a01519094506200069681620005e1565b60c08a0151909350620006a981620005e1565b8092505060e089015190509295985092959890939650565b6001600160a01b0398891681529688166020880152948716604087015292861660608601529085166080850152841660a084015290921660c082015260e08101919091526101000190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111562000764576200076462000738565b92915050565b8082018082111562000764576200076462000738565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b60006020808385031215620007bc57600080fd5b82516001600160401b0380821115620007d457600080fd5b818501915085601f830112620007e957600080fd5b815181811115620007fe57620007fe6200070c565b8060051b604051601f19603f830116810181811085821117156200082657620008266200070c565b6040529182528482019250838101850191888311156200084557600080fd5b938501935b828510156200086e576200085e85620005fa565b845293850193928501926200084a565b98975050505050505050565b6000600182016200088f576200088f62000738565b5060010190565b60805160a05160c05160e05161010051610120516101405161016051610180516101a051610abd6200092e6000396000610362015260006101ec0152600061022e0152600061033b0152600061039c0152600061025501526000610184015260006102f701526000818161015d015281816103f301526104590152600081816102aa015281816105a801526106080152610abd6000f3fe608060405234801561001057600080fd5b50600436106101125760003560e01c8063051ed8ef1461011757806315e812ad1461014857806321fc2eef1461015857806322be3de11461017f5780633895de30146101a657806348199e6b146101b95780634b5b02d6146101cc5780634f62feec146101e7578063758316c91461020e5780637b89f117146102295780637dc0d1d01461025057806389643a291461027757806389a302711461028a5780638abf6077146102a5578063901b96e7146102cc5780639ed93318146102df578063a5e598fc146102f2578063b4d1d79514610319578063c6bbd5a714610336578063d373b3331461035d578063eb5621b814610384578063f887ea4014610397575b600080fd5b61013273471ece3750da237f93b8e339c536989b8978a43881565b60405161013f9190610811565b60405180910390f35b485b60405190815260200161013f565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101326101b43660046108e3565b6103be565b6101326101c73660046108e3565b610422565b610132734f604735c1cf31399c6e711d5962b2b3e0225ad381565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b61013273765de816845861e75a25fca122bb6898b8b1282a81565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b610132610285366004610940565b6104ed565b61013273ceba9300f2b948710d2653dd7b07f33a8b32118c81565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101326102da36600461096a565b610577565b6101326102ed36600461096a565b6105d5565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b61032261025881565b60405162ffffff909116815260200161013f565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b61014a7f000000000000000000000000000000000000000000000000000000000000000081565b610132610392366004610985565b610696565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6000808484846040516020016103d693929190610a04565b6040516020818303038152906040528051906020012090506104197f0000000000000000000000000000000000000000000000000000000000000000823061071a565b95945050505050565b60008084848460405160200161043a93929190610a04565b604051602081830303815290604052805190602001209050600061047e7f000000000000000000000000000000000000000000000000000000000000000083610776565b60405163cf7a1d7760e01b81529091506001600160a01b0382169063cf7a1d77906104b190899089908990600401610a04565b600060405180830381600087803b1580156104cb57600080fd5b505af11580156104df573d6000803e3d6000fd5b509298975050505050505050565b6000806104f9846105d5565b604051631a730de160e31b8152600481018590523360248201529091506001600160a01b0382169063d3986f08906044016020604051808303816000875af1158015610549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056d9190610a6e565b5090505b92915050565b6000808260405160200161058b9190610811565b6040516020818303038152906040528051906020012090506105ce7f0000000000000000000000000000000000000000000000000000000000000000823061071a565b9392505050565b600080826040516020016105e99190610811565b604051602081830303815290604052805190602001209050600061062d7f000000000000000000000000000000000000000000000000000000000000000083610776565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de89061065c908790600401610811565b600060405180830381600087803b15801561067657600080fd5b505af115801561068a573d6000803e3d6000fd5b50929695505050505050565b6000806106a4878785610422565b604051631bd3078560e31b81526004810186905233602482015286151560448201529091506001600160a01b0382169063de983c2890606401600060405180830381600087803b1580156106f757600080fd5b505af115801561070b573d6000803e3d6000fd5b50929998505050505050505050565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166105715760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b604482015260640160405180910390fd5b6001600160a01b0391909116815260200190565b80356001600160a01b038116811461083c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261086857600080fd5b81356001600160401b038082111561088257610882610841565b604051601f8301601f19908116603f011681019082821181831017156108aa576108aa610841565b816040528381528660208588010111156108c357600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156108f857600080fd5b61090184610825565b925061090f60208501610825565b915060408401356001600160401b0381111561092a57600080fd5b61093686828701610857565b9150509250925092565b6000806040838503121561095357600080fd5b61095c83610825565b946020939093013593505050565b60006020828403121561097c57600080fd5b6105ce82610825565b600080600080600060a0868803121561099d57600080fd5b6109a686610825565b94506109b460208701610825565b9350604086013580151581146109c957600080fd5b92506060860135915060808601356001600160401b038111156109eb57600080fd5b6109f788828901610857565b9150509295509295909350565b600060018060a01b038086168352602081861681850152606060408501528451915081606085015260005b82811015610a4b57858101820151858201608001528101610a2f565b50506000608082850101526080601f19601f830116840101915050949350505050565b600060208284031215610a8057600080fd5b505191905056fea26469706673582212205c50c6814bbff8415099ed31b6729cfc1829ba8cafd028a743cac6caef8516cb64736f6c634300081300336101a06040523480156200001257600080fd5b50604051620036ee380380620036ee833981016040819052620000359162000092565b6001600160a01b0397881660805295871660c05293861660e0529185166101005284166101205261012c60a052831661014052909116610160526101805262000147565b6001600160a01b03811681146200008f57600080fd5b50565b600080600080600080600080610100898b031215620000b057600080fd5b8851620000bd8162000079565b60208a0151909850620000d08162000079565b60408a0151909750620000e38162000079565b60608a0151909650620000f68162000079565b60808a0151909550620001098162000079565b60a08a01519094506200011c8162000079565b60c08a01519093506200012f8162000079565b8092505060e089015190509295985092959890939650565b60805160a05160c05160e051610100516101205161014051610160516101805161342c620002c2600039600081816105540152818161194d015281816119cb01528181611d6b01528181612238015261241d0152600081816102db0152818161191b015281816119a301528181611d370152818161220601526123f5015260008181610372015281816118ea01528181611a3401528181611d04015281816121d501528181612370015261248d01526000818161052001526109780152600081816103a601528181610ab101528181610c7701528181610d610152611e6701526000818161046401528181610db20152818161120e015281816113f4015281816115b201528181611a0501528181612457015261251701526000818161026301528181610ae201528181610b8101528181610bf801528181610ca801528181610d900152611e9e015260006105e801526000818161063101528181611f9f01528181612048015281816127aa015261286a015261342c6000f3fe6080604052600436106101775760003560e01c8063051ed8ef146101835780630cd865ec146101c15780630fd152de146101e35780631219432014610211578063170ba9151461023157806322be3de11461025157806332f90ac3146102855780634b5b02d6146102a15780634f62feec146102c95780635b67b0c0146102fd57806360e4bf4b14610314578063758316c91461033e5780637b89f117146103605780637dc0d1d01461039457806381b7d2e0146103c8578063821dc910146103db57806389a30271146104105780638da5cb5b14610432578063a5e598fc14610452578063aa6bfa9d14610486578063af87ad3c14610499578063b1a5fa9f146104b9578063ba428926146104d9578063c4d66de8146104ee578063c6bbd5a71461050e578063d373b33314610542578063d3986f0814610576578063dbb15eb214610589578063e00e8fdd14610314578063f0036d5d146105a9578063f6207326146105d6578063f887ea401461061f57600080fd5b3661017e57005b600080fd5b34801561018f57600080fd5b506101ab73471ece3750da237f93b8e339c536989b8978a43881565b6040516101b89190612abf565b60405180910390f35b3480156101cd57600080fd5b506101e16101dc366004612ae8565b610653565b005b3480156101ef57600080fd5b506102036101fe366004612b0c565b6107bf565b6040519081526020016101b8565b34801561021d57600080fd5b5061020361022c366004612d0f565b6108be565b34801561023d57600080fd5b5061020361024c366004612d55565b610a02565b34801561025d57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561029157600080fd5b5061020367016345785d8a000081565b3480156102ad57600080fd5b506101ab734f604735c1cf31399c6e711d5962b2b3e0225ad381565b3480156102d557600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030957600080fd5b50610203620186a081565b34801561032057600080fd5b5061032a6101f481565b60405162ffffff90911681526020016101b8565b34801561034a57600080fd5b506101ab60008051602061337783398151915281565b34801561036c57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a057600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6102036103d6366004612d55565b610a17565b3480156103e757600080fd5b506103fb6103f6366004612dbf565b610a24565b604080519283526020830191909152016101b8565b34801561041c57600080fd5b506101ab6000805160206133d783398151915281565b34801561043e57600080fd5b506007546101ab906001600160a01b031681565b34801561045e57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b610203610494366004612b0c565b610e49565b3480156104a557600080fd5b506102036104b4366004612d55565b610f3f565b3480156104c557600080fd5b506102036104d4366004612b0c565b610f4c565b3480156104e557600080fd5b5061032a606481565b3480156104fa57600080fd5b506101e1610509366004612ae8565b611042565b34801561051a57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054e57600080fd5b506102037f000000000000000000000000000000000000000000000000000000000000000081565b610203610584366004612b0c565b61170b565b34801561059557600080fd5b506102036105a4366004612e01565b6118e6565b3480156105b557600080fd5b506105c96105c4366004612e1a565b611a9f565b6040516101b89190612ec3565b3480156105e257600080fd5b5061060a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b8565b34801561062b57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166106e0576007546040516000916001600160a01b03169047908381818185875af1925050503d80600081146106ae576040519150601f19603f3d011682016040523d82523d6000602084013e6106b3565b606091505b50509050806106dc5760405163e2a1cc9160e01b81524760048201526024015b60405180910390fd5b5050565b6007546040516370a0823160e01b81526001600160a01b038084169263a9059cbb9291169083906370a082319061071b903090600401612abf565b602060405180830381865afa158015610738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075c9190612ed6565b6040518363ffffffff1660e01b8152600401610779929190612eef565b6020604051808303816000875af1158015610798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dc9190612f08565b50565b60408051600380546060602082028401810185529383018181526000946108b59488948894919390928492849184018282801561082557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610807575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108a757602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff168152602001906003019060208260020104928301926001038202915080841161086c5790505b505050505081525050610f3f565b90505b92915050565b600081602001515160016108d29190612f40565b8251511480156108e757506000826020015151115b61094a5760405162461bcd60e51b815260206004820152602e60248201527f676574457870656374656452657475726e46726f6d556e69737761705061746860448201526d07440d2dcecc2d8d2c840e0c2e8d60931b60648201526084016106d3565b600061095e83600001518460200151611a9f565b60405163cdca175360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cdca1753906109af9084908890600401612f53565b6000604051808303816000875af11580156109ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109f69190810190612fd9565b50919695505050505050565b6000610a0f848484611c27565b949350505050565b6000610a0f848484611deb565b60408051600180825281830190925260009182918291602080830190803683370190505090508573471ece3750da237f93b8e339c536989b8978a437196001600160a01b03871601610b5e576101f482600081518110610a8657610a866130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610b0e9084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b539190810190613159565b509250829050610d20565b6001600160a01b038616600080516020613377833981519152148015610bbb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660008051602061337783398151915214155b15610bd557606482600081518110610a8657610a866130b0565b6001600160a01b0386166000805160206133d7833981519152148015610c3257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166000805160206133d783398151915214155b15610d2057606482600081518110610c4c57610c4c6130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610cd49084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d199190810190613159565b5092508290505b6101f482600081518110610d3657610d366130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610dde9084907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e239190810190613159565b5092506064610e33846062613200565b610e3d9190613217565b93505050935093915050565b60408051600580546060602082028401810185529383018181526000946108b594889488949193909284928491840182828015610eaf57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e91575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610f3157602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610ef65790505b505050505081525050610a17565b6000610a0f84848461219b565b60408051600180546060602082028401810185529383018181526000946108b594889488949193909284928491840182828015610fb257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f94575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561103457602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610ff95790505b505050505081525050610a02565b600054610100900460ff16158080156110625750600054600160ff909116105b8061107c5750303b15801561107c575060005460ff166001145b6110df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d3565b6000805460ff191660011790558015611102576000805461ff0019166101001790555b600780546001600160a01b0319166001600160a01b03841617905560408051600480825260a082019092526000916020820160808036833701905050905060008051602061337783398151915281600081518110611162576111626130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250506000805160206133d7833981519152816001815181106111a4576111a46130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816002815181106111ec576111ec6130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600381518110611240576112406130b0565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337019050509050606481600081518110611291576112916130b0565b602002602001019062ffffff16908162ffffff16815250506064816001815181106112be576112be6130b0565b602002602001019062ffffff16908162ffffff16815250506101f4816002815181106112ec576112ec6130b0565b62ffffff9092166020928302919091018201526040805180820190915283815280820183905283519091600191611328918391908701906129a2565b5060208281015180516113419260018501920190612a07565b5050604080516003808252608082019092526000925090602082016060803683370190505090506000805160206133d78339815191528160008151811061138a5761138a6130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816001815181106113d2576113d26130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110611426576114266130b0565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337019050509050606481600081518110611476576114766130b0565b602002602001019062ffffff16908162ffffff16815250506101f4816001815181106114a4576114a46130b0565b62ffffff90921660209283029190910182015260408051808201909152838152808201839052835190916003916114e0918391908701906129a2565b5060208281015180516114f99260018501920190612a07565b50506040805160038082526080820190925260009250906020820160608036833701905050905073471ece3750da237f93b8e339c536989b8978a43881600081518110611548576115486130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad381600181518110611590576115906130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106115e4576115e46130b0565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505090506101f481600081518110611635576116356130b0565b602002602001019062ffffff16908162ffffff16815250506101f481600181518110611663576116636130b0565b62ffffff909216602092830291909101820152604080518082019091528381528082018390528351909160059161169f918391908701906129a2565b5060208281015180516116b89260018501920190612a07565b5090505050505050505080156106dc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60004780156117635761171e8484610e49565b91506000805160206133b783398151915273471ece3750da237f93b8e339c536989b8978a438828460405161175593929190613239565b60405180910390a1506108b8565b6040516370a0823160e01b8152600080516020613377833981519152906370a0823190611794903090600401612abf565b602060405180830381865afa1580156117b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d59190612ed6565b90508015611818576117e78484610f4c565b91506000805160206133b7833981519152600080516020613377833981519152828460405161175593929190613239565b6040516370a0823160e01b81526000805160206133d7833981519152906370a0823190611849903090600401612abf565b602060405180830381865afa158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190612ed6565b905080156118cd5761189c84846107bf565b91506000805160206133b78339815191526000805160206133d7833981519152828460405161175593929190613239565b60405163701b93d160e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061194557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b8061196e57507f0000000000000000000000000000000000000000000000000000000000000000155b1561198c57604051639000cc3760e01b815260040160405180910390fd5b60405163a20f230560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000602483015260008051602061337783398151915260448301527f000000000000000000000000000000000000000000000000000000000000000081166064830152608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a20f23059060a401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b89190612ed6565b606081516001611aaf9190612f40565b8351148015611abf575060008251115b611b045760405162461bcd60e51b815260206004820152601660248201527577726f6e6720696e70757420706172616d657465727360501b60448201526064016106d3565b82600081518110611b1757611b176130b0565b6020026020010151604051602001611b42919060609190911b6001600160601b031916815260140190565b604051602081830303815290604052905060005b8251811015611bd65781838281518110611b7257611b726130b0565b602002602001015185836001611b889190612f40565b81518110611b9857611b986130b0565b6020026020010151604051602001611bb29392919061325a565b60405160208183030381529060405291508080611bce906132a1565b915050611b56565b50808360018551611be791906132ba565b81518110611bf757611bf76130b0565b6020026020010151604051602001611c109291906132cd565b604051602081830303815290604052905092915050565b60075460009081906001600160a01b0390811690851603611c49576000611c53565b67016345785d8a00005b6040516370a0823160e01b8152600080516020613377833981519152906370a0823190611c84903090600401612abf565b602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190612ed6565b611ccf91906132ba565b905060008111611cf15760405162461bcd60e51b81526004016106d3906132ff565b6000611cfd82856108be565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611d6257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b8015611d8d57507f000000000000000000000000000000000000000000000000000000000000000015155b90508015611da157611d9e846118e6565b91505b6000611db689611db186866121bb565b6121bb565b905083831115611dd157611dca81896121d1565b9550611ddf565b611ddc81898961267f565b95505b50505050509392505050565b60408051600180825281830190925260009182918291602080830190803683370190505090506101f481600081518110611e2757611e276130b0565b62ffffff909216602092830291909101909101526007546001600160a01b03868116911614611f2a57604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90611ee19067016345785d8a0000907f00000000000000000000000000000000000000000000000000000000000000009073471ece3750da237f93b8e339c536989b8978a438908790603c90600401613106565b600060405180830381865afa158015611efe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f269190810190613159565b5091505b6000611f3683476132ba565b90506000611f4c86600001518760200151611a9f565b90506000611f5a83886108be565b90506000818a11611f6b5781611f6d565b895b60405163095ea7b360e01b815290915073471ece3750da237f93b8e339c536989b8978a4389063095ea7b390611fc9907f0000000000000000000000000000000000000000000000000000000000000000908890600401612eef565b6020604051808303816000875af1158015611fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200c9190612f08565b50604080516080810182528481526007546001600160a01b03908116602083015281830187905260608201849052915163b858183f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163b858183f9161207d91600401613328565b6020604051808303816000875af115801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190612ed6565b6007549097506001600160a01b038a8116911614612151576000896001600160a01b03168760405160006040518083038185875af1925050503d8060008114612125576040519150601f19603f3d011682016040523d82523d6000602084013e61212a565b606091505b505090508061214f5760405163e2a1cc9160e01b8152600481018890526024016106d3565b505b60008051602061339783398151915273471ece3750da237f93b8e339c536989b8978a438858960405161218693929190613239565b60405180910390a15050505050509392505050565b6000610a0f6000805160206133d7833981519152620186a08686866126a0565b60008183116121ca57816108b5565b5090919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061223057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b8061225957507f0000000000000000000000000000000000000000000000000000000000000000155b1561227757604051639000cc3760e01b815260040160405180910390fd5b6007546000906001600160a01b03908116908416036122975760006122a1565b67016345785d8a00005b6040516370a0823160e01b81529091506000908290600080516020613377833981519152906370a08231906122da903090600401612abf565b602060405180830381865afa1580156122f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231b9190612ed6565b61232591906132ba565b9050600081116123475760405162461bcd60e51b81526004016106d3906132ff565b60405163095ea7b360e01b81526000805160206133778339815191529063095ea7b39061239a907f0000000000000000000000000000000000000000000000000000000000000000908590600401612eef565b6020604051808303816000875af11580156123b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dd9190612f08565b50604051630ddbbe8560e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000602483015260008051602061337783398151915260448301527f0000000000000000000000000000000000000000000000000000000000000000811660648301526084820183905260a482018790527f0000000000000000000000000000000000000000000000000000000000000000169063ddbbe8509060c4016020604051808303816000875af11580156124d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fa9190612ed6565b60075460405163a9059cbb60e01b81529194506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb9261254f9216908790600401612eef565b6020604051808303816000875af115801561256e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125929190612f08565b506007546001600160a01b038581169116148015906125b15750600082115b1561262e5760405163a9059cbb60e01b81526000805160206133778339815191529063a9059cbb906125e99087908690600401612eef565b6020604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c9190612f08565b505b7f8e2ac24d7ef5662ee242823a19dbd1c952b3e96ae127228f4bbce83e2816e3fb600080516020613377833981519152828560405161266f93929190613239565b60405180910390a1505092915050565b6000610a0f60008051602061337783398151915267016345785d8a00008686865b60075460009081906001600160a01b03908116908516036126c25760006126c4565b855b9050600081886001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016126f59190612abf565b602060405180830381865afa158015612712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127369190612ed6565b61274091906132ba565b9050600081116127865760405162461bcd60e51b81526020600482015260116024820152704e6f20737461626c652062616c616e636560781b60448201526064016106d3565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b3906127d4907f0000000000000000000000000000000000000000000000000000000000000000908590600401612eef565b6020604051808303816000875af11580156127f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128179190612f08565b50600061282c85600001518660200151611a9f565b604080516080810182528281526007546001600160a01b039081166020830152818301869052606082018b9052915163b858183f60e01b81529293507f00000000000000000000000000000000000000000000000000000000000000009091169163b858183f9161289f91600401613328565b6020604051808303816000875af11580156128be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e29190612ed6565b6007549094506001600160a01b0387811691161461296d5760405163a9059cbb60e01b81526001600160a01b038a169063a9059cbb906129289089908790600401612eef565b6020604051808303816000875af1158015612947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296b9190612f08565b505b60008051602061339783398151915289838660405161298e93929190613239565b60405180910390a150505095945050505050565b8280548282559060005260206000209081019282156129f7579160200282015b828111156129f757825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129c2565b50612a03929150612aaa565b5090565b82805482825590600052602060002090600901600a900481019282156129f75791602002820160005b83821115612a7257835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302612a30565b8015612aa15782816101000a81549062ffffff0219169055600301602081600201049283019260010302612a72565b5050612a039291505b5b80821115612a035760008155600101612aab565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146107bc57600080fd5b600060208284031215612afa57600080fd5b8135612b0581612ad3565b9392505050565b60008060408385031215612b1f57600080fd5b823591506020830135612b3181612ad3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612b7a57612b7a612b3c565b604052919050565b60006001600160401b03821115612b9b57612b9b612b3c565b5060051b60200190565b600082601f830112612bb657600080fd5b81356020612bcb612bc683612b82565b612b52565b82815260059290921b84018101918181019086841115612bea57600080fd5b8286015b84811015612c0e578035612c0181612ad3565b8352918301918301612bee565b509695505050505050565b600082601f830112612c2a57600080fd5b81356020612c3a612bc683612b82565b82815260059290921b84018101918181019086841115612c5957600080fd5b8286015b84811015612c0e57803562ffffff81168114612c795760008081fd5b8352918301918301612c5d565b600060408284031215612c9857600080fd5b604080519081016001600160401b038082118383101715612cbb57612cbb612b3c565b816040528293508435915080821115612cd357600080fd5b612cdf86838701612ba5565b83526020850135915080821115612cf557600080fd5b50612d0285828601612c19565b6020830152505092915050565b60008060408385031215612d2257600080fd5b8235915060208301356001600160401b03811115612d3f57600080fd5b612d4b85828601612c86565b9150509250929050565b600080600060608486031215612d6a57600080fd5b833592506020840135612d7c81612ad3565b915060408401356001600160401b03811115612d9757600080fd5b612da386828701612c86565b9150509250925092565b63ffffffff811681146107bc57600080fd5b600080600060608486031215612dd457600080fd5b833592506020840135612de681612ad3565b91506040840135612df681612dad565b809150509250925092565b600060208284031215612e1357600080fd5b5035919050565b60008060408385031215612e2d57600080fd5b82356001600160401b0380821115612e4457600080fd5b612e5086838701612ba5565b93506020850135915080821115612e6657600080fd5b50612d4b85828601612c19565b60005b83811015612e8e578181015183820152602001612e76565b50506000910152565b60008151808452612eaf816020860160208601612e73565b601f01601f19169290920160200192915050565b6020815260006108b56020830184612e97565b600060208284031215612ee857600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f1a57600080fd5b81518015158114612b0557600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156108b8576108b8612f2a565b604081526000612f666040830185612e97565b90508260208301529392505050565b600082601f830112612f8657600080fd5b81516020612f96612bc683612b82565b82815260059290921b84018101918181019086841115612fb557600080fd5b8286015b84811015612c0e578051612fcc81612dad565b8352918301918301612fb9565b60008060008060808587031215612fef57600080fd5b8451602080870151919550906001600160401b038082111561301057600080fd5b818801915088601f83011261302457600080fd5b8151613032612bc682612b82565b81815260059190911b8301840190848101908b83111561305157600080fd5b938501935b8285101561307857845161306981612ad3565b82529385019390850190613056565b60408b0151909850945050508083111561309157600080fd5b505061309f87828801612f75565b606096909601519497939650505050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130fb57815162ffffff16875295820195908201906001016130da565b509495945050505050565b6001600160801b03861681526001600160a01b0385811660208301528416604082015260a060608201819052600090613141908301856130c6565b905063ffffffff831660808301529695505050505050565b6000806040838503121561316c57600080fd5b8251602080850151919350906001600160401b0381111561318c57600080fd5b8401601f8101861361319d57600080fd5b80516131ab612bc682612b82565b81815260059190911b820183019083810190888311156131ca57600080fd5b928401925b828410156131f15783516131e281612ad3565b825292840192908401906131cf565b80955050505050509250929050565b80820281158282048414176108b8576108b8612f2a565b60008261323457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6000845161326c818460208901612e73565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6000600182016132b3576132b3612f2a565b5060010190565b818103818111156108b8576108b8612f2a565b600083516132df818460208801612e73565b60609390931b6001600160601b0319169190920190815260140192915050565b6020808252600f908201526e4e6f20635553442062616c616e636560881b604082015260600190565b60208152600082516080602084015261334460a0840182612e97565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152809150509291505056fe000000000000000000000000765de816845861e75a25fca122bb6898b8b1282adb1f2a6cbbfd964f19c648b140a35992aa80f482df8f519d3211d0bd86c9f335a9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c000000000000000000000000ceba9300f2b948710d2653dd7b07f33a8b32118ca2646970667358221220e9a6c18a3b95ffa0454f516b6c9f09dd285d1c5424a9f0a02ba4df2986c5e35864736f6c634300081300336101a06040523480156200001257600080fd5b50604051620040a7380380620040a7833981016040819052620000359162000092565b6001600160a01b0397881660805295871660c05293861660e0529185166101005284166101205261012c60a052831661014052909116610160526101805262000147565b6001600160a01b03811681146200008f57600080fd5b50565b600080600080600080600080610100898b031215620000b057600080fd5b8851620000bd8162000079565b60208a0151909850620000d08162000079565b60408a0151909750620000e38162000079565b60608a0151909650620000f68162000079565b60808a0151909550620001098162000079565b60a08a01519094506200011c8162000079565b60c08a01519093506200012f8162000079565b8092505060e089015190509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161018051613dc9620002de600039600081816105dc01528181611b0201528181611b80015281816123c6015281816128900152612a7501526000818161032301528181611ad001528181611b58015281816123920152818161285e0152612a4d0152600081816103ba01528181611a9f01528181611be90152818161235f0152818161282d015281816129c80152612ae50152600081816105880152610a060152600081816103ee01528181610bcd01528181610d9301528181610e7d01526124c20152600081816104cc01528181610ece015281816112ea015281816114d00152818161168801528181611bba01528181611c9e01528181611d7901528181611ec401528181611f4501528181612aaf0152612b6f01526000818161028901528181610bfe01528181610c9d01528181610d1401528181610dc401528181610eac01526124f9015260006106760152600081816106bf015281816125ee0152818161269701528181612e020152612ec20152613dc96000f3fe6080604052600436106101a35760003560e01c8063051ed8ef146101af5780630cd865ec146101e75780630fd152de146102095780631219432014610237578063170ba9151461025757806322be3de11461027757806332f90ac3146102ab5780634b5b02d6146102c75780634e417a98146102ef5780634f62feec146103115780635b67b0c01461034557806360e4bf4b1461035c578063758316c9146103865780637b89f117146103a85780637dc0d1d0146103dc57806381b7d2e014610410578063821dc9101461042357806386b12bab1461045857806389a30271146104785780638da5cb5b1461049a578063a5e598fc146104ba578063aa6bfa9d146104ee578063af87ad3c14610501578063b1a5fa9f14610521578063ba42892614610541578063c4d66de814610556578063c6bbd5a714610576578063cf7a1d77146105aa578063d373b333146105ca578063d3986f08146105fe578063dbb15eb214610611578063de983c2814610631578063e00e8fdd1461035c578063f0036d5d14610644578063f620732614610664578063f887ea40146106ad57600080fd5b366101aa57005b600080fd5b3480156101bb57600080fd5b506101d1600080516020613cd483398151915281565b6040516101de9190613117565b60405180910390f35b3480156101f357600080fd5b50610207610202366004613140565b6106e1565b005b34801561021557600080fd5b50610229610224366004613164565b61084d565b6040519081526020016101de565b34801561024357600080fd5b50610229610252366004613367565b61094c565b34801561026357600080fd5b506102296102723660046133ad565b610a90565b34801561028357600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b757600080fd5b5061022967016345785d8a000081565b3480156102d357600080fd5b506101d1734f604735c1cf31399c6e711d5962b2b3e0225ad381565b3480156102fb57600080fd5b50610304610aa5565b6040516101de9190613455565b34801561031d57600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b34801561035157600080fd5b50610229620186a081565b34801561036857600080fd5b506103726101f481565b60405162ffffff90911681526020016101de565b34801561039257600080fd5b506101d1600080516020613d1483398151915281565b3480156103b457600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e857600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b61022961041e3660046133ad565b610b33565b34801561042f57600080fd5b5061044361043e36600461347a565b610b40565b604080519283526020830191909152016101de565b34801561046457600080fd5b506008546101d1906001600160a01b031681565b34801561048457600080fd5b506101d1600080516020613d7483398151915281565b3480156104a657600080fd5b506007546101d1906001600160a01b031681565b3480156104c657600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b6102296104fc366004613164565b610f65565b34801561050d57600080fd5b5061022961051c3660046133ad565b61105b565b34801561052d57600080fd5b5061022961053c366004613164565b611068565b34801561054d57600080fd5b50610372606481565b34801561056257600080fd5b50610207610571366004613140565b61115e565b34801561058257600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b657600080fd5b506102076105c53660046134bc565b6117cf565b3480156105d657600080fd5b506102297f000000000000000000000000000000000000000000000000000000000000000081565b61022961060c366004613164565b6118c6565b34801561061d57600080fd5b5061022961062c366004613575565b611a9b565b61020761063f36600461359c565b611c54565b34801561065057600080fd5b5061030461065f3660046135d3565b6120fa565b34801561067057600080fd5b506106987f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101de565b3480156106b957600080fd5b506101d17f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b03811661076e576008546040516000916001600160a01b03169047908381818185875af1925050503d806000811461073c576040519150601f19603f3d011682016040523d82523d6000602084013e610741565b606091505b505090508061076a5760405163e2a1cc9160e01b81524760048201526024015b60405180910390fd5b5050565b6008546040516370a0823160e01b81526001600160a01b038084169263a9059cbb9291169083906370a08231906107a9903090600401613117565b602060405180830381865afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea919061362c565b6040518363ffffffff1660e01b8152600401610807929190613645565b6020604051808303816000875af1158015610826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076a919061365e565b50565b6040805160038054606060208202840181018552938301818152600094610943948894889491939092849284918401828280156108b357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610895575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561093557602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff16815260200190600301906020826002010492830192600103820291508084116108fa5790505b50505050508152505061105b565b90505b92915050565b600081602001515160016109609190613691565b82515114801561097557506000826020015151115b6109d85760405162461bcd60e51b815260206004820152602e60248201527f676574457870656374656452657475726e46726f6d556e69737761705061746860448201526d07440d2dcecc2d8d2c840e0c2e8d60931b6064820152608401610761565b60006109ec836000015184602001516120fa565b60405163cdca175360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cdca175390610a3d90849088906004016136a4565b6000604051808303816000875af1158015610a5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a84919081019061372a565b50919695505050505050565b6000610a9d848484612282565b949350505050565b60098054610ab290613801565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90613801565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b505050505081565b6000610a9d848484612446565b60408051600180825281830190925260009182918291602080830190803683370190505090508573471ece3750da237f93b8e339c536989b8978a437196001600160a01b03871601610c7a576101f482600081518110610ba257610ba261383b565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610c2a9084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613891565b600060405180830381865afa158015610c47573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c6f91908101906138e4565b509250829050610e3c565b6001600160a01b038616600080516020613d14833981519152148015610cd757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600080516020613d1483398151915214155b15610cf157606482600081518110610ba257610ba261383b565b6001600160a01b038616600080516020613d74833981519152148015610d4e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600080516020613d7483398151915214155b15610e3c57606482600081518110610d6857610d6861383b565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610df09084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613891565b600060405180830381865afa158015610e0d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e3591908101906138e4565b5092508290505b6101f482600081518110610e5257610e5261383b565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610efa9084907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613891565b600060405180830381865afa158015610f17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f3f91908101906138e4565b5092506064610f4f84606261398b565b610f5991906139a2565b93505050935093915050565b604080516005805460606020820284018101855293830181815260009461094394889488949193909284928491840182828015610fcb57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610fad575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561104d57602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff16815260200190600301906020826002010492830192600103820291508084116110125790505b505050505081525050610b33565b6000610a9d8484846127e4565b6040805160018054606060208202840181018552938301818152600094610943948894889491939092849284918401828280156110ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116110b0575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561115057602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff16815260200190600301906020826002010492830192600103820291508084116111155790505b505050505081525050610a90565b600054610100900460ff161580801561117e5750600054600160ff909116105b8061119f575061118d30612804565b15801561119f575060005460ff166001145b6111bb5760405162461bcd60e51b8152600401610761906139c4565b6000805460ff1916600117905580156111de576000805461ff0019166101001790555b600780546001600160a01b0319166001600160a01b03841617905560408051600480825260a0820190925260009160208201608080368337019050509050600080516020613d148339815191528160008151811061123e5761123e61383b565b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020613d74833981519152816001815181106112805761128061383b565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816002815181106112c8576112c861383b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160038151811061131c5761131c61383b565b6001600160a01b039290921660209283029190910182015260408051600380825260808201909252600092909190820160608036833701905050905060648160008151811061136d5761136d61383b565b602002602001019062ffffff16908162ffffff168152505060648160018151811061139a5761139a61383b565b602002602001019062ffffff16908162ffffff16815250506101f4816002815181106113c8576113c861383b565b62ffffff909216602092830291909101820152604080518082019091528381528082018390528351909160019161140491839190870190612ffa565b50602082810151805161141d926001850192019061305f565b505060408051600380825260808201909252600092509060208201606080368337019050509050600080516020613d74833981519152816000815181106114665761146661383b565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816001815181106114ae576114ae61383b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106115025761150261383b565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505090506064816000815181106115525761155261383b565b602002602001019062ffffff16908162ffffff16815250506101f4816001815181106115805761158061383b565b62ffffff90921660209283029190910182015260408051808201909152838152808201839052835190916003916115bc91839190870190612ffa565b5060208281015180516115d5926001850192019061305f565b505060408051600380825260808201909252600092509060208201606080368337019050509050600080516020613cd48339815191528160008151811061161e5761161e61383b565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816001815181106116665761166661383b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106116ba576116ba61383b565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505090506101f48160008151811061170b5761170b61383b565b602002602001019062ffffff16908162ffffff16815250506101f4816001815181106117395761173961383b565b62ffffff909216602092830291909101820152604080518082019091528381528082018390528351909160059161177591839190870190612ffa565b50602082810151805161178e926001850192019061305f565b50905050505050505050801561076a576000805461ff001916905560405160018152600080516020613cf48339815191529060200160405180910390a15050565b600054610100900460ff16158080156117ef5750600054600160ff909116105b8061181057506117fe30612804565b158015611810575060005460ff166001145b61182c5760405162461bcd60e51b8152600401610761906139c4565b6000805460ff19166001179055801561184f576000805461ff0019166101001790555b600780546001600160a01b038086166001600160a01b0319928316179092556008805492871692909116919091179055600961188b8382613a61565b5080156118c0576000805461ff001916905560405160018152600080516020613cf48339815191529060200160405180910390a15b50505050565b6000478015611918576118d98484610f65565b9150600080516020613d54833981519152600080516020613cd4833981519152828460405161190a93929190613b20565b60405180910390a150610946565b6040516370a0823160e01b8152600080516020613d14833981519152906370a0823190611949903090600401613117565b602060405180830381865afa158015611966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198a919061362c565b905080156119cd5761199c8484611068565b9150600080516020613d54833981519152600080516020613d14833981519152828460405161190a93929190613b20565b6040516370a0823160e01b8152600080516020613d74833981519152906370a08231906119fe903090600401613117565b602060405180830381865afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f919061362c565b90508015611a8257611a51848461084d565b9150600080516020613d54833981519152600080516020613d74833981519152828460405161190a93929190613b20565b60405163701b93d160e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580611afa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b80611b2357507f0000000000000000000000000000000000000000000000000000000000000000155b15611b4157604051639000cc3760e01b815260040160405180910390fd5b60405163a20f230560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152600080516020613d1483398151915260448301527f000000000000000000000000000000000000000000000000000000000000000081166064830152608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a20f23059060a401602060405180830381865afa158015611c30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610946919061362c565b6007546001600160a01b0316818015611c7b5750600060098054611c7790613801565b9050115b15611c9357600780546001600160a01b031916301790555b6000808315611ce7577f00000000000000000000000000000000000000000000000000000000000000009150611cc986866118c6565b600780546001600160a01b0319166001600160a01b03861617905590505b600060098054611cf690613801565b90501115612099576040516370a0823160e01b8152600090600080516020613d14833981519152906370a0823190611d32903090600401613117565b602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d73919061362c565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611dc39190613117565b602060405180830381865afa158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061362c565b9050478215611ea45760075460405163095ea7b360e01b8152600080516020613d148339815191529163095ea7b391611e4b916001600160a01b0316908790600401613645565b6020604051808303816000875af1158015611e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8e919061365e565b50600080516020613d1483398151915294508293505b8115611f6a5760075460405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263095ea7b392611eff9291909116908690600401613645565b6020604051808303816000875af1158015611f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f42919061365e565b507f000000000000000000000000000000000000000000000000000000000000000094508193505b80156120075760075460405163095ea7b360e01b8152600080516020613cd48339815191529163095ea7b391611fae916001600160a01b0316908590600401613645565b6020604051808303816000875af1158015611fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff1919061365e565b50600080516020613cd483398151915294508093505b60075460405160009182916001600160a01b0390911690829061202c90600990613b41565b60006040518083038185875af1925050503d8060008114612069576040519150601f19603f3d011682016040523d82523d6000602084013e61206e565b606091505b50915091508161209357806040516382c5e96b60e01b81526004016107619190613455565b50505050505b600854600754604080516001600160a01b0393841681529183166020830152918416818301526060810183905290517f53a00c43aa8edf6592dddb131949163c9cae5899ad4b8ea6887115dde624b1349181900360800190a1505050505050565b60608151600161210a9190613691565b835114801561211a575060008251115b61215f5760405162461bcd60e51b815260206004820152601660248201527577726f6e6720696e70757420706172616d657465727360501b6044820152606401610761565b826000815181106121725761217261383b565b602002602001015160405160200161219d919060609190911b6001600160601b031916815260140190565b604051602081830303815290604052905060005b825181101561223157818382815181106121cd576121cd61383b565b6020026020010151858360016121e39190613691565b815181106121f3576121f361383b565b602002602001015160405160200161220d93929190613bb7565b6040516020818303038152906040529150808061222990613bfe565b9150506121b1565b508083600185516122429190613c17565b815181106122525761225261383b565b602002602001015160405160200161226b929190613c2a565b604051602081830303815290604052905092915050565b60075460009081906001600160a01b03908116908516036122a45760006122ae565b67016345785d8a00005b6040516370a0823160e01b8152600080516020613d14833981519152906370a08231906122df903090600401613117565b602060405180830381865afa1580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612320919061362c565b61232a9190613c17565b90506000811161234c5760405162461bcd60e51b815260040161076190613c5c565b6000612358828561094c565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158015906123bd57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b80156123e857507f000000000000000000000000000000000000000000000000000000000000000015155b905080156123fc576123f984611a9b565b91505b60006124118961240c8686612813565b612813565b90508383111561242c576124258189612829565b955061243a565b612437818989612cd7565b95505b50505050509392505050565b60408051600180825281830190925260009182918291602080830190803683370190505090506101f4816000815181106124825761248261383b565b62ffffff909216602092830291909101909101526007546001600160a01b0386811691161461257f57604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca906125369067016345785d8a0000907f000000000000000000000000000000000000000000000000000000000000000090600080516020613cd4833981519152908790603c90600401613891565b600060405180830381865afa158015612553573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261257b91908101906138e4565b5091505b600061258b8347613c17565b905060006125a1866000015187602001516120fa565b905060006125af838861094c565b90506000818a116125c057816125c2565b895b60405163095ea7b360e01b8152909150600080516020613cd48339815191529063095ea7b390612618907f0000000000000000000000000000000000000000000000000000000000000000908890600401613645565b6020604051808303816000875af1158015612637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265b919061365e565b50604080516080810182528481526007546001600160a01b03908116602083015281830187905260608201849052915163b858183f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163b858183f916126cc91600401613c85565b6020604051808303816000875af11580156126eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270f919061362c565b6007549097506001600160a01b038a81169116146127a0576000896001600160a01b03168760405160006040518083038185875af1925050503d8060008114612774576040519150601f19603f3d011682016040523d82523d6000602084013e612779565b606091505b505090508061279e5760405163e2a1cc9160e01b815260048101889052602401610761565b505b600080516020613d34833981519152600080516020613cd483398151915285896040516127cf93929190613b20565b60405180910390a15050505050509392505050565b6000610a9d600080516020613d74833981519152620186a0868686612cf8565b6001600160a01b03163b151590565b60008183116128225781610943565b5090919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061288857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b806128b157507f0000000000000000000000000000000000000000000000000000000000000000155b156128cf57604051639000cc3760e01b815260040160405180910390fd5b6007546000906001600160a01b03908116908416036128ef5760006128f9565b67016345785d8a00005b6040516370a0823160e01b81529091506000908290600080516020613d14833981519152906370a0823190612932903090600401613117565b602060405180830381865afa15801561294f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612973919061362c565b61297d9190613c17565b90506000811161299f5760405162461bcd60e51b815260040161076190613c5c565b60405163095ea7b360e01b8152600080516020613d148339815191529063095ea7b3906129f2907f0000000000000000000000000000000000000000000000000000000000000000908590600401613645565b6020604051808303816000875af1158015612a11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a35919061365e565b50604051630ddbbe8560e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152600080516020613d1483398151915260448301527f0000000000000000000000000000000000000000000000000000000000000000811660648301526084820183905260a482018790527f0000000000000000000000000000000000000000000000000000000000000000169063ddbbe8509060c4016020604051808303816000875af1158015612b2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b52919061362c565b60075460405163a9059cbb60e01b81529194506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb92612ba79216908790600401613645565b6020604051808303816000875af1158015612bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bea919061365e565b506007546001600160a01b03858116911614801590612c095750600082115b15612c865760405163a9059cbb60e01b8152600080516020613d148339815191529063a9059cbb90612c419087908690600401613645565b6020604051808303816000875af1158015612c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c84919061365e565b505b7f8e2ac24d7ef5662ee242823a19dbd1c952b3e96ae127228f4bbce83e2816e3fb600080516020613d148339815191528285604051612cc793929190613b20565b60405180910390a1505092915050565b6000610a9d600080516020613d1483398151915267016345785d8a00008686865b60075460009081906001600160a01b0390811690851603612d1a576000612d1c565b855b9050600081886001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612d4d9190613117565b602060405180830381865afa158015612d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8e919061362c565b612d989190613c17565b905060008111612dde5760405162461bcd60e51b81526020600482015260116024820152704e6f20737461626c652062616c616e636560781b6044820152606401610761565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b390612e2c907f0000000000000000000000000000000000000000000000000000000000000000908590600401613645565b6020604051808303816000875af1158015612e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6f919061365e565b506000612e84856000015186602001516120fa565b604080516080810182528281526007546001600160a01b039081166020830152818301869052606082018b9052915163b858183f60e01b81529293507f00000000000000000000000000000000000000000000000000000000000000009091169163b858183f91612ef791600401613c85565b6020604051808303816000875af1158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a919061362c565b6007549094506001600160a01b03878116911614612fc55760405163a9059cbb60e01b81526001600160a01b038a169063a9059cbb90612f809089908790600401613645565b6020604051808303816000875af1158015612f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc3919061365e565b505b600080516020613d34833981519152898386604051612fe693929190613b20565b60405180910390a150505095945050505050565b82805482825590600052602060002090810192821561304f579160200282015b8281111561304f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061301a565b5061305b929150613102565b5090565b82805482825590600052602060002090600901600a9004810192821561304f5791602002820160005b838211156130ca57835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302613088565b80156130f95782816101000a81549062ffffff02191690556003016020816002010492830192600103026130ca565b505061305b9291505b5b8082111561305b5760008155600101613103565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461084a57600080fd5b60006020828403121561315257600080fd5b813561315d8161312b565b9392505050565b6000806040838503121561317757600080fd5b8235915060208301356131898161312b565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156131d2576131d2613194565b604052919050565b60006001600160401b038211156131f3576131f3613194565b5060051b60200190565b600082601f83011261320e57600080fd5b8135602061322361321e836131da565b6131aa565b82815260059290921b8401810191818101908684111561324257600080fd5b8286015b848110156132665780356132598161312b565b8352918301918301613246565b509695505050505050565b600082601f83011261328257600080fd5b8135602061329261321e836131da565b82815260059290921b840181019181810190868411156132b157600080fd5b8286015b8481101561326657803562ffffff811681146132d15760008081fd5b83529183019183016132b5565b6000604082840312156132f057600080fd5b604080519081016001600160401b03808211838310171561331357613313613194565b81604052829350843591508082111561332b57600080fd5b613337868387016131fd565b8352602085013591508082111561334d57600080fd5b5061335a85828601613271565b6020830152505092915050565b6000806040838503121561337a57600080fd5b8235915060208301356001600160401b0381111561339757600080fd5b6133a3858286016132de565b9150509250929050565b6000806000606084860312156133c257600080fd5b8335925060208401356133d48161312b565b915060408401356001600160401b038111156133ef57600080fd5b6133fb868287016132de565b9150509250925092565b60005b83811015613420578181015183820152602001613408565b50506000910152565b60008151808452613441816020860160208601613405565b601f01601f19169290920160200192915050565b6020815260006109436020830184613429565b63ffffffff8116811461084a57600080fd5b60008060006060848603121561348f57600080fd5b8335925060208401356134a18161312b565b915060408401356134b181613468565b809150509250925092565b6000806000606084860312156134d157600080fd5b83356134dc8161312b565b92506020848101356134ed8161312b565b925060408501356001600160401b038082111561350957600080fd5b818701915087601f83011261351d57600080fd5b81358181111561352f5761352f613194565b613541601f8201601f191685016131aa565b9150808252888482850101111561355757600080fd5b80848401858401376000848284010152508093505050509250925092565b60006020828403121561358757600080fd5b5035919050565b801515811461084a57600080fd5b6000806000606084860312156135b157600080fd5b8335925060208401356135c38161312b565b915060408401356134b18161358e565b600080604083850312156135e657600080fd5b82356001600160401b03808211156135fd57600080fd5b613609868387016131fd565b9350602085013591508082111561361f57600080fd5b506133a385828601613271565b60006020828403121561363e57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b60006020828403121561367057600080fd5b815161315d8161358e565b634e487b7160e01b600052601160045260246000fd5b808201808211156109465761094661367b565b6040815260006136b76040830185613429565b90508260208301529392505050565b600082601f8301126136d757600080fd5b815160206136e761321e836131da565b82815260059290921b8401810191818101908684111561370657600080fd5b8286015b8481101561326657805161371d81613468565b835291830191830161370a565b6000806000806080858703121561374057600080fd5b8451602080870151919550906001600160401b038082111561376157600080fd5b818801915088601f83011261377557600080fd5b815161378361321e826131da565b81815260059190911b8301840190848101908b8311156137a257600080fd5b938501935b828510156137c95784516137ba8161312b565b825293850193908501906137a7565b60408b015190985094505050808311156137e257600080fd5b50506137f0878288016136c6565b606096909601519497939650505050565b600181811c9082168061381557607f821691505b60208210810361383557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561388657815162ffffff1687529582019590820190600101613865565b509495945050505050565b6001600160801b03861681526001600160a01b0385811660208301528416604082015260a0606082018190526000906138cc90830185613851565b905063ffffffff831660808301529695505050505050565b600080604083850312156138f757600080fd5b8251602080850151919350906001600160401b0381111561391757600080fd5b8401601f8101861361392857600080fd5b805161393661321e826131da565b81815260059190911b8201830190838101908883111561395557600080fd5b928401925b8284101561397c57835161396d8161312b565b8252928401929084019061395a565b80955050505050509250929050565b80820281158282048414176109465761094661367b565b6000826139bf57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b601f821115613a5c57600081815260208120601f850160051c81016020861015613a395750805b601f850160051c820191505b81811015613a5857828155600101613a45565b5050505b505050565b81516001600160401b03811115613a7a57613a7a613194565b613a8e81613a888454613801565b84613a12565b602080601f831160018114613ac35760008415613aab5750858301515b600019600386901b1c1916600185901b178555613a58565b600085815260208120601f198616915b82811015613af257888601518255948401946001909101908401613ad3565b5085821015613b105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b039390931683526020830191909152604082015260600190565b6000808354613b4f81613801565b60018281168015613b675760018114613b7c57613bab565b60ff1984168752821515830287019450613bab565b8760005260208060002060005b85811015613ba25781548a820152908401908201613b89565b50505082870194505b50929695505050505050565b60008451613bc9818460208901613405565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b600060018201613c1057613c1061367b565b5060010190565b818103818111156109465761094661367b565b60008351613c3c818460208801613405565b60609390931b6001600160601b0319169190920190815260140192915050565b6020808252600f908201526e4e6f20635553442062616c616e636560881b604082015260600190565b602081526000825160806020840152613ca160a0840182613429565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152809150509291505056fe000000000000000000000000471ece3750da237f93b8e339c536989b8978a4387f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498000000000000000000000000765de816845861e75a25fca122bb6898b8b1282adb1f2a6cbbfd964f19c648b140a35992aa80f482df8f519d3211d0bd86c9f335a9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c000000000000000000000000ceba9300f2b948710d2653dd7b07f33a8b32118ca26469706673582212204f92f22aa0c71f050538d1c1677ac7372b47f8a8b4a53b6c7454fd07adccf48a64736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101125760003560e01c8063051ed8ef1461011757806315e812ad1461014857806321fc2eef1461015857806322be3de11461017f5780633895de30146101a657806348199e6b146101b95780634b5b02d6146101cc5780634f62feec146101e7578063758316c91461020e5780637b89f117146102295780637dc0d1d01461025057806389643a291461027757806389a302711461028a5780638abf6077146102a5578063901b96e7146102cc5780639ed93318146102df578063a5e598fc146102f2578063b4d1d79514610319578063c6bbd5a714610336578063d373b3331461035d578063eb5621b814610384578063f887ea4014610397575b600080fd5b61013273471ece3750da237f93b8e339c536989b8978a43881565b60405161013f9190610811565b60405180910390f35b485b60405190815260200161013f565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101326101b43660046108e3565b6103be565b6101326101c73660046108e3565b610422565b610132734f604735c1cf31399c6e711d5962b2b3e0225ad381565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b61013273765de816845861e75a25fca122bb6898b8b1282a81565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b610132610285366004610940565b6104ed565b61013273ceba9300f2b948710d2653dd7b07f33a8b32118c81565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6101326102da36600461096a565b610577565b6101326102ed36600461096a565b6105d5565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b61032261025881565b60405162ffffff909116815260200161013f565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b61014a7f000000000000000000000000000000000000000000000000000000000000000081565b610132610392366004610985565b610696565b6101327f000000000000000000000000000000000000000000000000000000000000000081565b6000808484846040516020016103d693929190610a04565b6040516020818303038152906040528051906020012090506104197f0000000000000000000000000000000000000000000000000000000000000000823061071a565b95945050505050565b60008084848460405160200161043a93929190610a04565b604051602081830303815290604052805190602001209050600061047e7f000000000000000000000000000000000000000000000000000000000000000083610776565b60405163cf7a1d7760e01b81529091506001600160a01b0382169063cf7a1d77906104b190899089908990600401610a04565b600060405180830381600087803b1580156104cb57600080fd5b505af11580156104df573d6000803e3d6000fd5b509298975050505050505050565b6000806104f9846105d5565b604051631a730de160e31b8152600481018590523360248201529091506001600160a01b0382169063d3986f08906044016020604051808303816000875af1158015610549573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056d9190610a6e565b5090505b92915050565b6000808260405160200161058b9190610811565b6040516020818303038152906040528051906020012090506105ce7f0000000000000000000000000000000000000000000000000000000000000000823061071a565b9392505050565b600080826040516020016105e99190610811565b604051602081830303815290604052805190602001209050600061062d7f000000000000000000000000000000000000000000000000000000000000000083610776565b60405163189acdbd60e31b81529091506001600160a01b0382169063c4d66de89061065c908790600401610811565b600060405180830381600087803b15801561067657600080fd5b505af115801561068a573d6000803e3d6000fd5b50929695505050505050565b6000806106a4878785610422565b604051631bd3078560e31b81526004810186905233602482015286151560448201529091506001600160a01b0382169063de983c2890606401600060405180830381600087803b1580156106f757600080fd5b505af115801561070b573d6000803e3d6000fd5b50929998505050505050505050565b60405160388101919091526f5af43d82803e903d91602b57fd5bf3ff60248201526014810192909252733d602d80600a3d3981f3363d3d373d3d3d363d73825260588201526037600c8201206078820152605560439091012090565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166105715760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b604482015260640160405180910390fd5b6001600160a01b0391909116815260200190565b80356001600160a01b038116811461083c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261086857600080fd5b81356001600160401b038082111561088257610882610841565b604051601f8301601f19908116603f011681019082821181831017156108aa576108aa610841565b816040528381528660208588010111156108c357600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156108f857600080fd5b61090184610825565b925061090f60208501610825565b915060408401356001600160401b0381111561092a57600080fd5b61093686828701610857565b9150509250925092565b6000806040838503121561095357600080fd5b61095c83610825565b946020939093013593505050565b60006020828403121561097c57600080fd5b6105ce82610825565b600080600080600060a0868803121561099d57600080fd5b6109a686610825565b94506109b460208701610825565b9350604086013580151581146109c957600080fd5b92506060860135915060808601356001600160401b038111156109eb57600080fd5b6109f788828901610857565b9150509295509295909350565b600060018060a01b038086168352602081861681850152606060408501528451915081606085015260005b82811015610a4b57858101820151858201608001528101610a2f565b50506000608082850101526080601f19601f830116840101915050949350505050565b600060208284031215610a8057600080fd5b505191905056fea26469706673582212205c50c6814bbff8415099ed31b6729cfc1829ba8cafd028a743cac6caef8516cb64736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
