60806040523480156200001157600080fd5b5060405162002c5d38038062002c5d8339810160408190526200003491620001d3565b604080518082018252600380825262233ab960e91b6020808401918252845180860190955282855262232aa960e91b908501528251859492620000799290916200012d565b5080516200008f9060049060208401906200012d565b5050600580546001600160a01b039093166001600160a01b031990931683179055506040805163183b6e2160e11b81529051633076dc4291600480820192602092909190829003018186803b158015620000e857600080fd5b505afa158015620000fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000123919062000205565b600755506200025c565b8280546200013b906200021f565b90600052602060002090601f0160209004810192826200015f5760008555620001aa565b82601f106200017a57805160ff1916838001178555620001aa565b82800160010185558215620001aa579182015b82811115620001aa5782518255916020019190600101906200018d565b50620001b8929150620001bc565b5090565b5b80821115620001b85760008155600101620001bd565b600060208284031215620001e657600080fd5b81516001600160a01b0381168114620001fe57600080fd5b9392505050565b6000602082840312156200021857600080fd5b5051919050565b600181811c908216806200023457607f821691505b602082108114156200025657634e487b7160e01b600052602260045260246000fd5b50919050565b6129f1806200026c6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806378353db6116100b8578063b02bf4b91161007c578063b02bf4b914610301578063c946b17c14610314578063ce619a0c14610334578063dd62ed3e1461035f578063df03984d14610398578063fbc70c97146103ab57600080fd5b806378353db61461029557806395d89b41146102c0578063a457c2d7146102c8578063a9059cbb146102db578063af7d6ca3146102ee57600080fd5b8063313ce5671161010a578063313ce5671461020f578063395093511461021e57806348a6d9af1461023157806353fce6701461024657806357a49b3a1461025957806370a082311461026c57600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd146101885780631e5291941461019a57806323b872dd146101fc575b600080fd5b61014f6103be565b60405161015c91906125ec565b60405180910390f35b6101786101733660046121fe565b610450565b604051901515815260200161015c565b6002545b60405190815260200161015c565b6101ad6101a8366004612529565b610466565b6040805163ffffffff988916815297909616602088015261ffff948516958701959095529183166060860152821660808501521660a08301526001600160401b031660c082015260e00161015c565b61017861020a3660046121bd565b6104e2565b6040516012815260200161015c565b61017861022c3660046121fe565b610591565b61024461023f36600461214a565b6105cd565b005b61017861025436600461222a565b610631565b610244610267366004612284565b6108a1565b61018c61027a36600461214a565b6001600160a01b031660009081526020819052604090205490565b6102a86102a336600461230c565b610cb1565b6040516001600160801b03909116815260200161015c565b61014f610e89565b6101786102d63660046121fe565b610e98565b6101786102e93660046121fe565b610f31565b6102446102fc3660046121fe565b610f3e565b61024461030f3660046121fe565b610f78565b6103276103223660046124f7565b610fb7565b60405161015c919061254b565b600554610347906001600160a01b031681565b6040516001600160a01b03909116815260200161015c565b61018c61036d366004612184565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61018c6103a63660046124f7565b611090565b61018c6103b93660046124f7565b61125a565b6060600380546103cd906128cb565b80601f01602080910402602001604051908101604052809291908181526020018280546103f9906128cb565b80156104465780601f1061041b57610100808354040283529160200191610446565b820191906000526020600020905b81548152906001019060200180831161042957829003601f168201915b5050505050905090565b600061045d338484611286565b50600192915050565b6006602052816000526040600020818154811061048257600080fd5b60009182526020909120015463ffffffff8082169350600160201b820416915061ffff600160401b8204811691600160501b8104821691600160601b8204811691600160701b8104909116906001600160401b03600160801b9091041687565b60006104ef8484846113ab565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105795760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6105868533858403611286565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161045d9185906105c8908690612763565b611286565b60056105d83361157a565b60ff16101561060f5760405162461bcd60e51b815260206004820152600360248201526227aba760e91b6044820152606401610570565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000600461063e3361157a565b60ff16101561065f5760405162461bcd60e51b815260040161057090612641565b604051635ed88ecf60e01b81526001600160a01b03848116600483015260009190841690635ed88ecf9060240160206040518083038186803b1580156106a457600080fd5b505afa1580156106b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dc91906124da565b61ffff16116107165760405162461bcd60e51b8152600401610570906020808252600490820152634c49564560e01b604082015260600190565b6000826001600160a01b03166306661abd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561075157600080fd5b505afa158015610765573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078991906124da565b61ffff1690506000836001600160a01b031663ee11af786040518163ffffffff1660e01b815260040160206040518083038186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080291906124da565b61ffff16905063ffffffff8216811180159061089657610894888888886001600160a01b031663af9c7b446040518163ffffffff1660e01b815260040160206040518083038186803b15801561085757600080fd5b505afa15801561086b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088f9190612510565b611843565b505b979650505050505050565b60046108ac3361157a565b60ff1610156108cd5760405162461bcd60e51b815260040161057090612641565b6005546040805163c9d4623f60e01b815290516000926001600160a01b03169163c9d4623f916004808301926020929190829003018186803b15801561091257600080fd5b505afa158015610926573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094a9190612167565b6040516347c1d7f160e01b815263ffffffff851660048201526001600160a01b0391909116906347c1d7f19060240160e06040518083038186803b15801561099157600080fd5b505afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c991906123f8565b905060008160a0015161ffff1611610a0b5760405162461bcd60e51b815260206004820152600560248201526410d3d5539560da1b6044820152606401610570565b60c08101516001600160401b031615610a4c5760405162461bcd60e51b815260206004820152600360248201526211915160ea1b6044820152606401610570565b6005546040516331a9108f60e11b815260048101869052610ae791889188916001600160a01b031690636352211e9060240160206040518083038186803b158015610a9657600080fd5b505afa158015610aaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ace9190612167565b858560400151610ade91906127bd565b61ffff16611843565b506000610af88583600001516118c1565b90506000610b0a600160201b8361279b565b9050838360a001818151610b1e91906127bd565b61ffff1690525063ffffffff811615610baa5760a08301516000878152600660205260409020610b4f600184612886565b63ffffffff1681548110610b6557610b65612956565b60009182526020909120018054600e90610b8b908490600160701b900461ffff1661271f565b92506101000a81548161ffff021916908361ffff160217905550610ca7565b426001600160401b0390811660c085019081526000888152600660209081526040808320805460018101825590845292829020885193018054928901519189015160608a015160808b015160a08c0151975163ffffffff97881667ffffffffffffffff1990971696909617600160201b97909516969096029390931763ffffffff60401b1916600160401b61ffff9283160261ffff60501b191617600160501b938216939093029290921763ffffffff60601b1916600160601b9483169490940261ffff60701b191693909317600160701b91909416029290921767ffffffffffffffff60801b1916600160801b92909316919091029190911790555b5050505050505050565b60006004610cbe3361157a565b60ff161015610cdf5760405162461bcd60e51b815260040161057090612641565b6005546040516331a9108f60e11b8152600481018690526000916001600160a01b031690636352211e9060240160206040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190612167565b9050610d7387878361088f60ff88166101f4612809565b50600560009054906101000a90046001600160a01b03166001600160a01b031663c9d4623f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dc257600080fd5b505afa158015610dd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfa9190612167565b6001600160a01b031663bab411e0898387876040518563ffffffff1660e01b8152600401610e2b949392919061265f565b602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d91906124bd565b98975050505050505050565b6060600480546103cd906128cb565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610f1a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610570565b610f273385858403611286565b5060019392505050565b600061045d3384846113ab565b6004610f493361157a565b60ff161015610f6a5760405162461bcd60e51b815260040161057090612641565b610f748282611c5a565b5050565b6004610f833361157a565b60ff161015610fa45760405162461bcd60e51b815260040161057090612641565b80610fad575050565b610f748282611da0565b606060066000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156110855760008481526020908190206040805160e0810182529185015463ffffffff8082168452600160201b8204168385015261ffff600160401b8204811692840192909252600160501b810482166060840152600160601b810482166080840152600160701b810490911660a08301526001600160401b03600160801b9091041660c0820152825260019092019101610fec565b505050509050919050565b60008080805b60008581526006602052604090205463ffffffff82161080156110bf575063ffffffff81811611155b1561122a576000858152600660205260408120805461117a919063ffffffff85169081106110ef576110ef612956565b60009182526020918290206040805160e081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b830461ffff90811691830191909152600160501b830481166060830152600160601b830481166080830152600160701b83041660a0820152600160801b9091046001600160401b031660c0820152611e7f565b90508015611217576000868152600660205260409020805463ffffffff84169081106111a8576111a8612956565b6000918252602090912001546111c990600160501b900461ffff168561271f565b600087815260066020526040902080549195509063ffffffff84169081106111f3576111f3612956565b60009182526020909120015461121490600160601b900461ffff168461271f565b92505b508061122281612906565b915050611096565b508061ffff168261ffff166201000061124391906127e7565b61124d9190612745565b62ffffff16949350505050565b60008181526006602052604081205461127557506000919050565b6112808260006118c1565b92915050565b6001600160a01b0383166112e85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610570565b6001600160a01b0382166113495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610570565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b03831661140f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610570565b6001600160a01b0382166114715760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610570565b6001600160a01b038316600090815260208190526040902054818110156114e95760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610570565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611520908490612763565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161156c91815260200190565b60405180910390a350505050565b60008061158683611eff565b905060ff8116156115975792915050565b6005546001600160a01b03848116911614806116495750600560009054906101000a90046001600160a01b03166001600160a01b031663c9d4623f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156115fc57600080fd5b505afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116349190612167565b6001600160a01b0316836001600160a01b0316145b806116ea5750600560009054906101000a90046001600160a01b03166001600160a01b0316635ac025826040518163ffffffff1660e01b815260040160206040518083038186803b15801561169d57600080fd5b505afa1580156116b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d59190612167565b6001600160a01b0316836001600160a01b0316145b8061178b5750600560009054906101000a90046001600160a01b03166001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b15801561173e57600080fd5b505afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190612167565b6001600160a01b0316836001600160a01b0316145b8061182c5750600560009054906101000a90046001600160a01b03166001600160a01b03166392eec6b26040518163ffffffff1660e01b815260040160206040518083038186803b1580156117df57600080fd5b505afa1580156117f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118179190612167565b6001600160a01b0316836001600160a01b0316145b1561183a5750601092915050565b50600092915050565b60006001600160a01b0383811690861614801590806118665750600460ff861610155b61189b5760405162461bcd60e51b81526004016105709060208082526004908201526311d2519560e21b604082015260600190565b801580156118a95750600083115b156118b8576118b88684611c5a565b95945050505050565b600080808060015b60008781526006602052604090205463ffffffff8216118015906118f3575063ffffffff81811611155b15611c03576000878152600660205260408120611911600184612886565b63ffffffff168154811061192757611927612956565b60009182526020918290206040805160e081018252929091015463ffffffff8082168452600160201b82041693830193909352600160401b830461ffff90811691830191909152600160501b830481166060830152600160601b830481166080830152600160701b83041660a0820152600160801b9091046001600160401b031660c082015290506119b881611e7f565b611b9f5760008881526006602052604090205460011015611b4d57600088815260066020526040902080546119ef9060019061286f565b815481106119ff576119ff612956565b600091825260208083208b845260069091526040909220910190611a24600185612886565b63ffffffff1681548110611a3a57611a3a612956565b6000918252602090912082549101805463ffffffff92831663ffffffff19821681178355845467ffffffffffffffff1990921617600160201b918290049093160291909117808255825469ffff0000000000000000198216600160401b9182900461ffff9081169092029081178455845463ffffffff60401b1990931661ffff60501b1990911617600160501b92839004821690920291909117808355835461ffff60601b198216600160601b9182900484169091029081178455845463ffffffff60601b1990921661ffff60701b1990911617600160701b918290049092160217808255915467ffffffffffffffff60801b19909216600160801b928390046001600160401b03169092029190911790555b6000888152600660205260409020805480611b6a57611b6a612940565b600082815260209020810160001990810180546001600160c01b031916905501905581611b96816128ab565b92505050611bf1565b6060810151611bae908561271f565b9350806080015183611bc0919061271f565b925063ffffffff871615801590611be657508663ffffffff16816000015163ffffffff16145b15611bef578194505b505b80611bfb81612906565b9150506118c9565b508061ffff168261ffff1662010000611c1c91906127e7565b62ffffff16611c3563ffffffff8616600160201b61284b565b611c3f919061277b565b611c49919061277b565b64ffffffffff169695505050505050565b6001600160a01b038216611cba5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610570565b6001600160a01b03821660009081526020819052604090205481811015611d2e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610570565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611d5d90849061286f565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200161139e565b6001600160a01b038216611df65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610570565b8060026000828254611e089190612763565b90915550506001600160a01b03821660009081526020819052604081208054839290611e35908490612763565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008160c001516001600160401b031660001415611e9f57506000919050565b600060075483602001518460a0015161ffff16611ebc9190612828565b63ffffffff16611ecc9190612809565b8360c001516001600160401b0316611ee49190612763565b90504281111561183a57611ef8428261286f565b9392505050565b60006001600160a01b038216611f1757506000919050565b813b6001600160a01b03831632141580611f3057508015155b15611f3e5750600092915050565b600560009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8c57600080fd5b505afa158015611fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc49190612167565b6001600160a01b0316836001600160a01b03161415611fe65750600592915050565b600554604051630935e01b60e21b81526001600160a01b038581166004830152909116906324d7806c9060240160206040518083038186803b15801561202b57600080fd5b505afa15801561203f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206391906122ea565b156120715750600492915050565b600554604051637d379c9b60e11b81526001600160a01b0385811660048301529091169063fa6f39369060240160206040518083038186803b1580156120b657600080fd5b505afa1580156120ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ee91906122ea565b1561045d5750600292915050565b80356121078161296c565b919050565b803561210781612984565b805161210781612999565b80516001600160401b038116811461210757600080fd5b803560ff8116811461210757600080fd5b60006020828403121561215c57600080fd5b8135611ef88161296c565b60006020828403121561217957600080fd5b8151611ef88161296c565b6000806040838503121561219757600080fd5b82356121a28161296c565b915060208301356121b28161296c565b809150509250929050565b6000806000606084860312156121d257600080fd5b83356121dd8161296c565b925060208401356121ed8161296c565b929592945050506040919091013590565b6000806040838503121561221157600080fd5b823561221c8161296c565b946020939093013593505050565b6000806000806080858703121561224057600080fd5b843561224b8161296c565b935061225960208601612139565b925060408501356122698161296c565b915060608501356122798161296c565b939692955090935050565b600080600080600060a0868803121561229c57600080fd5b85356122a78161296c565b94506122b560208701612139565b93506040860135925060608601356122cc816129a9565b915060808601356122dc81612999565b809150509295509295909350565b6000602082840312156122fc57600080fd5b81518015158114611ef857600080fd5b60008060008060008086880361016081121561232757600080fd5b60c081121561233557600080fd5b5061233e6126e9565b873561234981612999565b8152602088013561235981612999565b6020820152604088013561236c81612999565b6040820152606088013561237f81612999565b6060820152608088013561239281612999565b608082015260a08801356123a5816129a9565b60a082015295506123b860c088016120fc565b94506123c660e08801612139565b935061010087013592506123dd610120880161210c565b91506123ec6101408801612139565b90509295509295509295565b600060e0828403121561240a57600080fd5b60405160e081018181106001600160401b038211171561243a57634e487b7160e01b600052604160045260246000fd5b6040528251612448816129a9565b81526020830151612458816129a9565b6020820152604083015161246b81612999565b6040820152606083015161247e81612999565b606082015261248f60808401612117565b60808201526124a060a08401612117565b60a08201526124b160c08401612122565b60c08201529392505050565b6000602082840312156124cf57600080fd5b8151611ef881612984565b6000602082840312156124ec57600080fd5b8151611ef881612999565b60006020828403121561250957600080fd5b5035919050565b60006020828403121561252257600080fd5b5051919050565b6000806040838503121561253c57600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b828110156125df578151805163ffffffff90811686528782015116878601528581015161ffff9081168787015260608083015182169087015260808083015182169087015260a0808301519091169086015260c0908101516001600160401b03169085015260e09093019290850190600101612568565b5091979650505050505050565b600060208083528351808285015260005b81811015612619578581018301518582016040015282016125fd565b8181111561262b576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526004908201526347414d4560e01b604082015260600190565b60006101208201905061ffff8087511683528060208801511660208401528060408801511660408401528060608801511660608401528060808801511660808401525063ffffffff60a08701511660a08301526126c760c08301866001600160a01b03169052565b6001600160801b03841660e083015260ff831661010083015295945050505050565b60405160c081016001600160401b038111828210171561271957634e487b7160e01b600052604160045260246000fd5b60405290565b600061ffff80831681851680830382111561273c5761273c61292a565b01949350505050565b600062ffffff80831681851680830382111561273c5761273c61292a565b600082198211156127765761277661292a565b500190565b600064ffffffffff80831681851680830382111561273c5761273c61292a565b6000826127b857634e487b7160e01b600052601260045260246000fd5b500490565b600061ffff808316818516818304811182151516156127de576127de61292a565b02949350505050565b600062ffffff808316818516818304811182151516156127de576127de61292a565b60008160001904831182151516156128235761282361292a565b500290565b600063ffffffff808316818516818304811182151516156127de576127de61292a565b600064ffffffffff808316818516818304811182151516156127de576127de61292a565b6000828210156128815761288161292a565b500390565b600063ffffffff838116908316818110156128a3576128a361292a565b039392505050565b600063ffffffff8216806128c1576128c161292a565b6000190192915050565b600181811c908216806128df57607f821691505b6020821081141561290057634e487b7160e01b600052602260045260246000fd5b50919050565b600063ffffffff808316818114156129205761292061292a565b6001019392505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461298157600080fd5b50565b6001600160801b038116811461298157600080fd5b61ffff8116811461298157600080fd5b63ffffffff8116811461298157600080fdfea2646970667358221220aa92c6360ad0fcb631b6865652b054aaabde93fc4967ddec61cf00dbec9ce93864736f6c634300080700330000000000000000000000002d004b72d8b7d36f9da2e4a14516618bf53bac57