0x60e06040526113886003553480156200001757600080fd5b5060405162005840380380620058408339810160408190526200003a916200025f565b82823380806200006557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200007081620001f2565b5050600180546001600160a01b0319166001600160a01b039384161790556002558516620000e25760405163643b81d760e01b815260206004820152601360248201527f746f6b656e496d706c656d656e746174696f6e0000000000000000000000000060448201526064016200005c565b6001600160a01b0384166200013b5760405163643b81d760e01b815260206004820152601860248201527f6d756c7469546f6b656e496d706c656d656e746174696f6e000000000000000060448201526064016200005c565b6001600160a01b038316620001945760405163643b81d760e01b815260206004820152601360248201527f70726f746f636f6c42656e65666963696172790000000000000000000000000060448201526064016200005c565b80600003620001d25760405163643b81d760e01b81526020600482015260086024820152676d6178537465707360c01b60448201526064016200005c565b6001600160a01b0394851660a0529290931660c0525060805250620002bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200025a57600080fd5b919050565b600080600080600060a086880312156200027857600080fd5b620002838662000242565b9450620002936020870162000242565b9350620002a36040870162000242565b6060870151608090970151959894975095949392505050565b60805160a05160c051615554620002ec60003960006119cd01526000610bb50152600061323d01526155546000f3fe6080604052600436106102195760003560e01c8063995e5f921161011d578063c9cb204b116100b0578063f2fde38b1161007f578063f74bfe8e11610064578063f74bfe8e14610801578063fb8c13c814610821578063fccc28131461084157600080fd5b8063f2fde38b14610786578063f6a3d24e146107a657600080fd5b8063c9cb204b14610620578063cfc5562214610640578063d9fe0eae14610660578063dce0b4e41461077057600080fd5b8063a746ee2e116100ec578063a746ee2e14610586578063a9816b08146105b3578063ac4e9675146105e0578063c162c9161461060057600080fd5b8063995e5f92146104ec5780639c65003d146105195780639cc7becf146105515780639f181b5e1461057157600080fd5b8063715018a6116101b057806377e456cb1161017f57806385396d2b1161016457806385396d2b146104815780638da5cb5b14610494578063990e6005146104bf57600080fd5b806377e456cb1461042a578063840d885d1461044057600080fd5b8063715018a6146103a05780637348ed2f146103b5578063763e7da6146103d557806376a9864b146103f557600080fd5b806350801fb1116101ec57806350801fb1146102ce57806354fd4d50146103145780635a4d5311146103605780636fa237951461038057600080fd5b806307e329461461021e57806327e381a91461025457806330be6955146102765780634f64b2be146102ae575b600080fd5b34801561022a57600080fd5b5061023e61023936600461495f565b610857565b60405161024b9190614992565b60405180910390f35b34801561026057600080fd5b5061027461026f3660046149ec565b610a90565b005b610289610284366004614a1f565b610b5f565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161024b565b3480156102ba57600080fd5b506102896102c9366004614a8b565b610f45565b3480156102da57600080fd5b506103066102e9366004614aa4565b600560209081526000928352604080842090915290825290205481565b60405190815260200161024b565b34801561032057600080fd5b50604080518082018252600781527f302e312e313230000000000000000000000000000000000000000000000000006020820152905161024b9190614b45565b34801561036c57600080fd5b5061030661037b366004614b58565b610f7c565b34801561038c57600080fd5b5061027461039b366004614a8b565b611195565b3480156103ac57600080fd5b506102746111d2565b3480156103c157600080fd5b506102746103d0366004614a8b565b6111e6565b3480156103e157600080fd5b506102746103f0366004614aa4565b61125f565b34801561040157600080fd5b50610415610410366004614b9e565b611382565b6040805192835260208301919091520161024b565b34801561043657600080fd5b5061030660035481565b34801561044c57600080fd5b5061046061045b3660046149ec565b611851565b6040516fffffffffffffffffffffffffffffffff909116815260200161024b565b61028961048f366004614bc8565b611977565b3480156104a057600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610289565b3480156104cb57600080fd5b506001546102899073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104f857600080fd5b5061050c6105073660046149ec565b611b8c565b60405161024b9190614c63565b34801561052557600080fd5b50610306610534366004614aa4565b600460209081526000928352604080842090915290825290205481565b34801561055d57600080fd5b5061046061056c3660046149ec565b611c3e565b34801561057d57600080fd5b50600754610306565b34801561059257600080fd5b506105a66105a13660046149ec565b611ca8565b60405161024b9190614dff565b3480156105bf57600080fd5b506105d36105ce366004614e7b565b611ecb565b60405161024b9190614e9d565b3480156105ec57600080fd5b506104156105fb366004614aa4565b612084565b34801561060c57600080fd5b5061027461061b3660046149ec565b6120d7565b34801561062c57600080fd5b5061041561063b366004614b9e565b61221c565b34801561064c57600080fd5b5061027461065b3660046149ec565b6126a4565b34801561066c57600080fd5b5061071861067b3660046149ec565b60066020526000908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff8083169374010000000000000000000000000000000000000000840461ffff90811694760100000000000000000000000000000000000000000000810490911693780100000000000000000000000000000000000000000000000090910464ffffffffff16929091169086565b6040805173ffffffffffffffffffffffffffffffffffffffff978816815261ffff9687166020820152949095169484019490945264ffffffffff919091166060830152909216608083015260a082015260c00161024b565b34801561077c57600080fd5b5061030660025481565b34801561079257600080fd5b506102746107a13660046149ec565b612823565b3480156107b257600080fd5b506107f16107c13660046149ec565b73ffffffffffffffffffffffffffffffffffffffff90811660009081526006602052604090206001015416151590565b604051901515815260200161024b565b34801561080d57600080fd5b5061030661081c366004614b58565b61288c565b34801561082d57600080fd5b5061023e61083c36600461495f565b612aad565b34801561084d57600080fd5b5061028961dead81565b6060818310158061087257506127106108708484614f4c565b115b156108a9576040517f891724d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600754808311156108b8578092505b6000845b84811015610941578673ffffffffffffffffffffffffffffffffffffffff1660066000600784815481106108f2576108f2614f5f565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff90811684529083019390935260409091019020600101541603610939578160010191505b6001016108bc565b508067ffffffffffffffff81111561095b5761095b614f8e565b604051908082528060200260200182016040528015610984578160200160208202803683370190505b5092506000855b85811015610a85578773ffffffffffffffffffffffffffffffffffffffff1660066000600784815481106109c1576109c1614f5f565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff90811684529083019390935260409091019020600101541603610a7d5760078181548110610a1457610a14614f5f565b6000918252602090912001548551600184019373ffffffffffffffffffffffffffffffffffffffff9092169187918110610a5057610a50614f5f565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152818314610a85575b60010161098b565b505050509392505050565b610a98612cd5565b73ffffffffffffffffffffffffffffffffffffffff8116610ae5576040517f5059b85f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fcf7686c0c53a1ab216c4cd81c1bc037136c791a61f30af4a78827c3915766044906020015b60405180910390a150565b60006002543414610b9c576040517f3403ce3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ba583612d28565b610bae82612e17565b6000610be67f0000000000000000000000000000000000000000000000000000000000000000610be16020870187614fbd565b613443565b90508073ffffffffffffffffffffffffffffffffffffffff8116637029144c610c0f8780614fbd565b610c1c60208a018a614fbd565b6040518563ffffffff1660e01b8152600401610c3b949392919061506b565b600060405180830381600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b5050600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905550610ce8905082856134fa565b610cf860608501604086016149ec565b73ffffffffffffffffffffffffffffffffffffffff9081169083167f6596c1670eb3390048d23721809c3da5d3f531375ac0e2cab0f77a808ed64331610d3e8880614fbd565b610d4b60208b018b614fbd565b604051610d5b949392919061506b565b60405180910390a3610d7060a085018561509d565b6000818110610d8157610d81614f5f565b9050602002016020810190610d969190615105565b6fffffffffffffffffffffffffffffffff16600003610e955773ffffffffffffffffffffffffffffffffffffffff8116631b5ad8b533610dd9608088018861509d565b6000818110610dea57610dea614f5f565b9050602002016020810190610dff9190615105565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526fffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610e7c57600080fd5b505af1158015610e90573d6000803e3d6000fd5b505050505b60025415610f3b5760015460025460405160009273ffffffffffffffffffffffffffffffffffffffff1691908381818185875af1925050503d8060008114610ef9576040519150601f19603f3d011682016040523d82523d6000602084013e610efe565b606091505b5050905080610f39576040517f0d4d59b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5090505b92915050565b60078181548110610f5557600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600073ffffffffffffffffffffffffffffffffffffffff8216610fcb576040517fd9b08f7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610fd8878761221c565b9150915084821015611016576040517f07728bb000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871660008181526006602052604080822081517ff4efe8f20000000000000000000000000000000000000000000000000000000081523360048201819052602482018c905292519194929363f4efe8f29260448084019382900301818387803b15801561109757600080fd5b505af11580156110ab573d6000803e3d6000fd5b5050505082846110bb9190615137565b8260020160008282546110ce9190614f4c565b909155505060018201546110f89073ffffffffffffffffffffffffffffffffffffffff1684613a89565b600182015473ffffffffffffffffffffffffffffffffffffffff1661111e818887613ad9565b60018301546040805173ffffffffffffffffffffffffffffffffffffffff8a81168252602082018d905291810188905291811691848216918d16907f80a56de61873550ae491e454783a8dfc9d08a6f8bdace0887eabd4315c4b9da8906060015b60405180910390a4509298975050505050505050565b61119d612cd5565b60028190556040518181527f88a973fd5506071e0cf878b30898776c47d5250a7ee1e6ee0b36df3b03c7c16a90602001610b54565b6111da612cd5565b6111e46000613b5f565b565b6111ee612cd5565b61271081111561122a576040517f5059b85f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f21085b3501e0e4fa8e0c825e7ed36b44420471b9f3c5aef447cebe50b2db133d90602001610b54565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600660205260409020805490911633146112c2576040517f36a0203800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821661130f576040517f67f61c8200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178355604051908516907f9dcef3aa57f22970dfc6ff519e5421e041cc4153300a7dabe19bffe85e25568890600090a3505050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260066020526040812060010154909182918591166113e9576040517f2d350e9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600003611423576040517fc01ae10500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600660209081526040808320815160e0810183528154808716825261ffff7401000000000000000000000000000000000000000082048116838701527601000000000000000000000000000000000000000000008204168285015264ffffffffff780100000000000000000000000000000000000000000000000090910416606082015260018201549095166080860152600281015460a0860152600381018054835181860281018601909452808452949594919360c08601939290879084015b8282101561156057600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101611501565b5050505081525050905060008160c001519050600087905060008173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e9919061514a565b905060006115f78983615137565b90506116028a611c3e565b6fffffffffffffffffffffffffffffffff1681111561164d576040517f6b5b0f7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116be9190615163565b6116c990600a6152a6565b905089600080806116da8f88613bd4565b90505b88518110156117df5760008982815181106116fa576116fa614f5f565b602002602001015190508781600001516fffffffffffffffffffffffffffffffff166117269190614f4c565b925084831015611792578260000361173e57506117cf565b61176981602001516fffffffffffffffffffffffffffffffff168461176391906152b5565b87613c8c565b6117739085615137565b935061177f8389615137565b975061178b8386614f4c565b94506117cd565b6117b781602001516fffffffffffffffffffffffffffffffff168661176391906152b5565b6117c19085615137565b935060009450506117df565b505b6117d8816152cc565b90506116dd565b508115806117ed5750600083115b15611824576040517fc01ae10500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611832828a60200151613cdc565b9a5061183e8b83615137565b9b50505050505050505050509250929050565b6000808273ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c3919061514a565b90506118ce83611c3e565b6fffffffffffffffffffffffffffffffff168110156118f3576118f0816152cc565b90505b60006118ff8483613bd4565b73ffffffffffffffffffffffffffffffffffffffff851660009081526006602052604090206003018054919250908290811061193d5761193d614f5f565b60009182526020909120015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16949350505050565b600060025434146119b4576040517f3403ce3700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119bd83613cf9565b6119c682612e17565b60006119f97f0000000000000000000000000000000000000000000000000000000000000000610be16020870187614fbd565b90508073ffffffffffffffffffffffffffffffffffffffff81166341e461a0611a228780614fbd565b611a2f60208a018a614fbd565b611a3c60408c018c614fbd565b6040518763ffffffff1660e01b8152600401611a5d96959493929190615304565b600060405180830381600087803b158015611a7757600080fd5b505af1158015611a8b573d6000803e3d6000fd5b5050600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861617905550611b0a905082856134fa565b611b1a60608501604086016149ec565b73ffffffffffffffffffffffffffffffffffffffff9081169083167f42d30c09380d6b8dbb77d95cae534a5c8fbf778789d87f58030bd74280437071611b608880614fbd565b611b6d60208b018b614fbd565b611b7a60408d018d614fbd565b604051610d5b96959493929190615304565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600660209081526040808320600301805482518185028101850190935280835260609492939192909184015b82821015611c3357600084815260209081902060408051808201909152908401546fffffffffffffffffffffffffffffffff80821683527001000000000000000000000000000000009091041681830152825260019092019101611bd4565b505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604081206003018054611c7490600190614f4c565b81548110611c8457611c84614f5f565b6000918252602090912001546fffffffffffffffffffffffffffffffff1692915050565b611d3f60408051608080820183526000808352602080840182905284516101c081018652828152908101829052808501829052606080820181905292810183905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081