60806040523480156200001157600080fd5b5060405162001fc438038062001fc48339810160408190526200003491620001fe565b80620000408162000124565b50600380546001600160a01b0319166001600160a01b03841617905560046200006a858262000342565b50600562000079848262000342565b506003546001600160a01b031660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260408120805461ffff9290620000c79084906200040e565b909155505060035460408051600080825261ffff60208301526001600160a01b03909316929182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505062000436565b600262000132828262000342565b5050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200015e57600080fd5b81516001600160401b03808211156200017b576200017b62000136565b604051601f8301601f19908116603f01168101908282118183101715620001a657620001a662000136565b8160405283815260209250866020858801011115620001c457600080fd5b600091505b83821015620001e85785820183015181830184015290820190620001c9565b6000602085830101528094505050505092915050565b600080600080608085870312156200021557600080fd5b84516001600160401b03808211156200022d57600080fd5b6200023b888389016200014c565b955060208701519150808211156200025257600080fd5b62000260888389016200014c565b604088015190955091506001600160a01b03821682146200028057600080fd5b6060870151919350808211156200029657600080fd5b50620002a5878288016200014c565b91505092959194509250565b600181811c90821680620002c657607f821691505b602082108103620002e757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033d576000816000526020600020601f850160051c81016020861015620003185750805b601f850160051c820191505b81811015620003395782815560010162000324565b5050505b505050565b81516001600160401b038111156200035e576200035e62000136565b62000376816200036f8454620002b1565b84620002ed565b602080601f831160018114620003ae5760008415620003955750858301515b600019600386901b1c1916600185901b17855562000339565b600085815260208120601f198616915b82811015620003df57888601518255948401946001909101908401620003be565b5085821015620003fe5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200043057634e487b7160e01b600052601160045260246000fd5b92915050565b611b7e80620004466000396000f3fe608060405234801561001057600080fd5b50600436106100f45760003560e01c80636423db3411610097578063e985e9c511610066578063e985e9c51461020f578063ece8c31c14610258578063f242432a1461026b578063fc25a4da1461027e57600080fd5b80636423db34146101e457806395d89b41146101ec578063a22cb465146101f4578063a538bd901461020757600080fd5b80630e89341c116100d35780630e89341c146101575780632eb2c2d61461016a5780634e1273f41461017f57806363d1302c1461019f57600080fd5b8062fdd58e146100f957806301ffc9a71461011f57806306fdde0314610142575b600080fd5b61010c6101073660046113a5565b6102a6565b6040519081526020015b60405180910390f35b61013261012d366004611400565b610318565b6040519015158152602001610116565b61014a6103fb565b6040516101169190611488565b61014a61016536600461149b565b610489565b61017d610178366004611653565b61051d565b005b61019261018d366004611763565b6105e8565b6040516101169190611803565b6003546101bf9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610116565b61017d6106ce565b61014a610788565b61017d610202366004611816565b610795565b61017d6107a4565b61013261021d366004611852565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b61017d610266366004611885565b610870565b61017d6102793660046118c2565b610982565b61010c61028c366004611927565b600060208181529281526040808220909352908152205481565b60008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205481036102e257506001610312565b5060008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a260000000000000000000000000000000000000000000000000000000014806103ab57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061031257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610312565b600480546104089061194a565b80601f01602080910402602001604051908101604052809291908181526020018280546104349061194a565b80156104815780601f1061045657610100808354040283529160200191610481565b820191906000526020600020905b81548152906001019060200180831161046457829003601f168201915b505050505081565b6060600280546104989061194a565b80601f01602080910402602001604051908101604052809291908181526020018280546104c49061194a565b80156105115780601f106104e657610100808354040283529160200191610511565b820191906000526020600020905b8154815290600101906020018083116104f457829003601f168201915b50505050509050919050565b3373ffffffffffffffffffffffffffffffffffffffff86168114801590610577575073ffffffffffffffffffffffffffffffffffffffff80871660009081526001602090815260408083209385168352929052205460ff16155b156105d3576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044015b60405180910390fd5b6105e08686868686610a40565b505050505050565b6060815183511461063257815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105ca565b6000835167ffffffffffffffff81111561064e5761064e6114b4565b604051908082528060200260200182016040528015610677578160200160208202803683370190505b50905060005b84518110156106c6576020808202860101516106a1906020808402870101516102a6565b8282815181106106b3576106b361199d565b602090810291909101015260010161067d565b509392505050565b600354604080516000815261ffff602082015273ffffffffffffffffffffffffffffffffffffffff90921691829182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460035473ffffffffffffffffffffffffffffffffffffffff1660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560205260408120805461ffff92906107819084906119fb565b9091555050565b600580546104089061194a565b6107a0338383610af4565b5050565b60035473ffffffffffffffffffffffffffffffffffffffff1660008181527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602090815260408083205481518481529283015291929182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460035473ffffffffffffffffffffffffffffffffffffffff1660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb56020526040812055565b80518061087c57600080fd5b60005b818161ffff161015610922576000838261ffff16815181106108a3576108a361199d565b602090810291909101810151600354604080516000815260019481019490945291935073ffffffffffffffffffffffffffffffffffffffff8085169391169182917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4508061091a81611a0e565b91505061087f565b5060035473ffffffffffffffffffffffffffffffffffffffff1660009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604081208054839290610979908490611a2f565b90915550505050565b3373ffffffffffffffffffffffffffffffffffffffff861681148015906109dc575073ffffffffffffffffffffffffffffffffffffffff80871660009081526001602090815260408083209385168352929052205460ff16155b15610a33576040517fe237d92200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083166004830152871660248201526044016105ca565b6105e08686868686610bdc565b73ffffffffffffffffffffffffffffffffffffffff8416610a90576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016105ca565b73ffffffffffffffffffffffffffffffffffffffff8516610ae0576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016105ca565b610aed8585858585610cb7565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8216610b44576040517fced3e100000000000000000000000000000000000000000000000000000000008152600060048201526024016105ca565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8416610c2c576040517f57f447ce000000000000000000000000000000000000000000000000000000008152600060048201526024016105ca565b73ffffffffffffffffffffffffffffffffffffffff8516610c7c576040517f01a83514000000000000000000000000000000000000000000000000000000008152600060048201526024016105ca565b60408051600180825260208201869052818301908152606082018590526080820190925290610cae8787848487610cb7565b50505050505050565b610cc385858585610d17565b73ffffffffffffffffffffffffffffffffffffffff841615610aed5782513390600103610d095760208481015190840151610d02838989858589610ff9565b50506105e0565b6105e08187878787876111eb565b8051825114610d5f57815181516040517f5b059991000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016105ca565b3360005b8351811015610ecc5760208181028581018201519085019091015173ffffffffffffffffffffffffffffffffffffffff881615610e635760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8c16845290915290205481811015610e2f576040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a1660048201526024810182905260448101839052606481018490526084016105ca565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8d16845290915290209082900390555b73ffffffffffffffffffffffffffffffffffffffff871615610ec25760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054839290610ebc9084906119fb565b90915550505b5050600101610d63565b508251600103610f7457602083015160009060208401519091508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051610f65929190918252602082015260400190565b60405180910390a45050610aed565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610fea929190611a42565b60405180910390a45050505050565b73ffffffffffffffffffffffffffffffffffffffff84163b156105e0576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e61906110709089908990889088908890600401611a70565b6020604051808303816000875af19250505080156110c9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526110c691810190611ac0565b60015b611158573d8080156110f7576040519150601f19603f3d011682016040523d82523d6000602084013e6110fc565b606091505b508051600003611150576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016105ca565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014610cae576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016105ca565b73ffffffffffffffffffffffffffffffffffffffff84163b156105e0576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c81906112629089908990889088908890600401611add565b6020604051808303816000875af19250505080156112bb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526112b891810190611ac0565b60015b6112e9573d8080156110f7576040519150601f19603f3d011682016040523d82523d6000602084013e6110fc565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014610cae576040517f57f447ce00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024016105ca565b803573ffffffffffffffffffffffffffffffffffffffff811681146113a057600080fd5b919050565b600080604083850312156113b857600080fd5b6113c18361137c565b946020939093013593505050565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146113fd57600080fd5b50565b60006020828403121561141257600080fd5b813561141d816113cf565b9392505050565b6000815180845260005b8181101561144a5760208185018101518683018201520161142e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061141d6020830184611424565b6000602082840312156114ad57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561152a5761152a6114b4565b604052919050565b600067ffffffffffffffff82111561154c5761154c6114b4565b5060051b60200190565b600082601f83011261156757600080fd5b8135602061157c61157783611532565b6114e3565b8083825260208201915060208460051b87010193508684111561159e57600080fd5b602086015b848110156115ba57803583529183019183016115a3565b509695505050505050565b600082601f8301126115d657600080fd5b813567ffffffffffffffff8111156115f0576115f06114b4565b61162160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016114e3565b81815284602083860101111561163657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561166b57600080fd5b6116748661137c565b94506116826020870161137c565b9350604086013567ffffffffffffffff8082111561169f57600080fd5b6116ab89838a01611556565b945060608801359150808211156116c157600080fd5b6116cd89838a01611556565b935060808801359150808211156116e357600080fd5b506116f0888289016115c5565b9150509295509295909350565b600082601f83011261170e57600080fd5b8135602061171e61157783611532565b8083825260208201915060208460051b87010193508684111561174057600080fd5b602086015b848110156115ba576117568161137c565b8352918301918301611745565b6000806040838503121561177657600080fd5b823567ffffffffffffffff8082111561178e57600080fd5b61179a868387016116fd565b935060208501359150808211156117b057600080fd5b506117bd85828601611556565b9150509250929050565b60008151808452602080850194506020840160005b838110156117f8578151875295820195908201906001016117dc565b509495945050505050565b60208152600061141d60208301846117c7565b6000806040838503121561182957600080fd5b6118328361137c565b91506020830135801515811461184757600080fd5b809150509250929050565b6000806040838503121561186557600080fd5b61186e8361137c565b915061187c6020840161137c565b90509250929050565b60006020828403121561189757600080fd5b813567ffffffffffffffff8111156118ae57600080fd5b6118ba848285016116fd565b949350505050565b600080600080600060a086880312156118da57600080fd5b6118e38661137c565b94506118f16020870161137c565b93506040860135925060608601359150608086013567ffffffffffffffff81111561191b57600080fd5b6116f0888289016115c5565b6000806040838503121561193a57600080fd5b8235915061187c6020840161137c565b600181811c9082168061195e57607f821691505b602082108103611997577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610312576103126119cc565b600061ffff808316818103611a2557611a256119cc565b6001019392505050565b81810381811115610312576103126119cc565b604081526000611a5560408301856117c7565b8281036020840152611a6781856117c7565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152611ab560a0830184611424565b979650505050505050565b600060208284031215611ad257600080fd5b815161141d816113cf565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a06040830152611b1660a08301866117c7565b8281036060840152611b2881866117c7565b90508281036080840152611b3c8185611424565b9897505050505050505056fea2646970667358221220b1b79dddba1ad98c4d368fb63b738026cd289bbb34f2965e84f7df5e669eb0cd64736f6c63430008180033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000856c4efb76c1d1ae02e20ceb03a2a6a08b0b8dc30000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000923206f6574682e757300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018636c61696d2072657761726473206f6e206f6574682e75730000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f636c6f7564666c6172652d697066732e636f6d2f697066732f516d6151426f576e717736764b4168317a37486f395157794b746f5954645763535247674537396b45316438487a2f7b69647d2e6a736f6e00000000000000